class A
{......}A p1=new A(); A p2=new A().
p1=p2;
个人理解是,p1和p2对应于同一个内存地址,只不过此地址分别对应两个名字p1p2,地址内容是一样的.
我想问的问题是,为什么关于字符串的就不是这样的.例如,
String a="kkkkk";
String b=a;
b="jjjj";
为什么这时改变b的值,但a不发生变化呢?难道b=a,不是对字符串的引用吗?

解决方案 »

  1.   

    你的p1 != p2
    b的值也不能改变a的值,因为String是不可变的
    改变的是引用
      

  2.   

    p1 != p2并且string是不可变类
      

  3.   

    class A
    {......}A p1=new A(); A p2=new A().
    p1=p2
    =================================
    p1=p2  //这里p1只是引用p2变量 
    p1和p2还是不同的对象  内存地址也是不一样的至于String 它是final的 只要你创建了一个String  它的值永远不会改变
    如果用别的变量对它附值  它也只是引用这个变量  内存还是指向刚创建时的对象 
      

  4.   

    p1和p2是不同的对象  内存地址也不一样;
    String a="kkkkk";//a指向‘kkkkk'。
    String b=a;//b也指向‘kkkkk'。
    b="jjjj";//b指向了‘jjjj',a不变。
      

  5.   

    A p1=new A(); A p2=new A();// 此时,p1和p2分别指向不同内存地址上的不同对象。p1 = p2;// 此时,让p2也指向p1所指的那个对象,而p2原来指的那个对象不再可用,成为垃圾对象。-------------------------------------------String a="kkkkk";// 此时,先在内存的String常量区创建一个String对象"kkkkk",并让变量a指向它。String b=a;// 此时,让另一个变量b也指向"kkkkk"。b="jjjj";// 此时,在内存的常量区创建另一个String对象"jjjj",并让b指向它。a仍然指向"kkkkk"。