StringBuffer a=new StringBuffer("immutable"); 
这句话里面a代表一个引用,里面存的是一个指向immutable的内存地址,然后内存里面还有另外一个空间存的是StringBuffer类型的字符串值immutable,immutable可以理解为一个对象     是这样吗 

解决方案 »

  1.   

    确切的说,a不是引用,a是一个引用变量,这个变量的值是一个StringBuffer对象的值
    在内存中开辟了一块内存给new出来的StringBuffer
    至于"immutable"其实是在String Pool中的一个String对象
      

  2.   

    immutable 是一个对象,LZ说的对。 变量 a 引用了这个对象。
      

  3.   

    StringBuffer a=new StringBuffer("immutable"); 
    这个语句创建了三个量a、
    a是一个引用变量,它的值是StringBuffer对象的物理地址,存放在stack里,它指向对象,而对象是在heap里面。
      

  4.   


    确切的说,a不是引用,a是一个引用变量,这个变量的值是一个StringBuffer对象的值 
    在内存中开辟了一块内存给new出来的StringBuffer 
    至于"immutable"其实是在String Pool中的一个String对象正解
      

  5.   

    首先我不太明白引用和引用变量的区别,下以引用代替.a是一个引用,在栈中占据内存空间 。 而后边的new StringBuffer()为一个StringBuffer开辟内存.
    里边的immutable是一个字符串,传递给StringBuffer构造方法的参数,在StringBuffer内部会经过加工把它构造成一个StringBuffer对象.
      

  6.   

    StringBuffer a=new StringBuffer("immutable"); 
    如果"immutable"存在于Strinig pool中,那么创造一个StringBuffer对象,并把"immutable"复制到StringBuffer对象中,让引用a指向那个StringBuffer对象。
    如果"immutable"不存在于Strinig pool中,那么先把"immutable"加入String pool中,然后执行上面的步骤。
    Strinig pool中的每一个String都是一个对象。但是很可惜,StringBuffer引用永远都不可能指到String pool里面去。
    StringBuffer继承自AbstractStringBuilder,看看StringBuffer和AbstractStringBuilder的构造函数:public StringBuffer(String str) {
    super(str.length() + 16);
    append(str);
    }AbstractStringBuilder(int capacity) {
            value = new char[capacity];
    }
    很显然,它开辟了新的内存空间。