String 的不变性是指在堆内存中的对象不可以再改变,但引用它的变量却可以再引用别的String对象。如
String a = "";   //在堆内存中创建一个字符串对象(""),同时一个String型引用变量a 指向它
a = "ssss";      //在堆内创建另一个String对象("ssss"),将上面的引用变量a转而指向新的对象

解决方案 »

  1.   

    另外,关于String还要理解“常量池”的概念。
      

  2.   

    http://community.csdn.net/Expert/topic/2872/2872127.xml?temp=.8397028
      

  3.   

    String是封装类而不是原始数据类型,但是可以像原始数据类型似的进行一些基本操作。3种创建方式应该没有本质的区别。String“一旦被创建,具有不变性”
    -------------------------------------------------------------------------
    说的不是String的变量不可变而是String对象本身,字符串对象一旦被创建就不能再被改变,
    进行类如String a和String b的连接操作a+b会产生新的字符串对象。如有不妥,欢迎补充
      

  4.   

    如果换成1个class Player,b是Player的一个实例
    我要创建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种写法会造成更大的内存开销,是不是这样呢,请高手指点
      

  5.   

    还有,String“一旦被创建,具有不变性”,这个不变性,如何理解呢?
    比如String a = new String("SSS")
    我下面还是可以对a赋其他的值,如:a = "bbbb"; a = a.substring(2,3);
    怎么叫“不变性”呢?a 为引用,而并非字符串对象本身,这种赋值为变化引用,而非改变对象;