String 的不变性是指在堆内存中的对象不可以再改变,但引用它的变量却可以再引用别的String对象。如
String a = ""; //在堆内存中创建一个字符串对象(""),同时一个String型引用变量a 指向它
a = "ssss"; //在堆内创建另一个String对象("ssss"),将上面的引用变量a转而指向新的对象
String a = ""; //在堆内存中创建一个字符串对象(""),同时一个String型引用变量a 指向它
a = "ssss"; //在堆内创建另一个String对象("ssss"),将上面的引用变量a转而指向新的对象
-------------------------------------------------------------------------
说的不是String的变量不可变而是String对象本身,字符串对象一旦被创建就不能再被改变,
进行类如String a和String b的连接操作a+b会产生新的字符串对象。如有不妥,欢迎补充
我要创建1个新的Player实例,
这样写Player a = b;
和Player a = new Player(); a = b;
有什么区别吗?
我的理解是:
新的对象不是必须都要用关键字new出来吗.所以Player a = b,是不是并没有分配堆内存空间,直接让a直接指向引用类型b,第2种写法Player a = new Player(),先是分配堆内存空间给引用类型a,然后a = b,使a指向b,然后垃圾回收将自动收回先前分配的堆内存空间。因此第2种写法会造成更大的内存开销,是不是这样呢,请高手指点
比如String a = new String("SSS")
我下面还是可以对a赋其他的值,如:a = "bbbb"; a = a.substring(2,3);
怎么叫“不变性”呢?a 为引用,而并非字符串对象本身,这种赋值为变化引用,而非改变对象;