StringBuffer a=new StringBuffer("immutable");
这句话里面a代表一个引用,里面存的是一个指向immutable的内存地址,然后内存里面还有另外一个空间存的是StringBuffer类型的字符串值immutable,immutable可以理解为一个对象 是这样吗
这句话里面a代表一个引用,里面存的是一个指向immutable的内存地址,然后内存里面还有另外一个空间存的是StringBuffer类型的字符串值immutable,immutable可以理解为一个对象 是这样吗
在内存中开辟了一块内存给new出来的StringBuffer
至于"immutable"其实是在String Pool中的一个String对象
这个语句创建了三个量a、
a是一个引用变量,它的值是StringBuffer对象的物理地址,存放在stack里,它指向对象,而对象是在heap里面。
确切的说,a不是引用,a是一个引用变量,这个变量的值是一个StringBuffer对象的值
在内存中开辟了一块内存给new出来的StringBuffer
至于"immutable"其实是在String Pool中的一个String对象正解
里边的immutable是一个字符串,传递给StringBuffer构造方法的参数,在StringBuffer内部会经过加工把它构造成一个StringBuffer对象.
如果"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];
}
很显然,它开辟了新的内存空间。