你将s的指针(和c的指针有些区别)指向的地址a付给s1,然后改变s的指向,此时s改变了,但是s1仍然指向a而你上面改变的是某个对象的字段或者叫成员变量,当然可以成功,
如果你
Point pt1 = new Point(100, 200), pt2 = new Point(300, 400);
Point p = pt1;
System.out.println(p);
pt1 = pt2;
System.out.println(p);
得到的仍然和s的差不多。

解决方案 »

  1.   

    再请问,如果说后面我将s="all bad",改变了s的指向;那么我用s+="all bad",为什么还是不一样呢?在s所指字符串后加上一个字符串,会改变s所指向的字符串地址变化吗?
      是不是应该这样解释,s是字符串“all good”对象的引用,字符串“all good”变化了,对象也就不一样了,所以s和s1所指的不是同一个对象了
      

  2.   

    s+="all bad";后,获得All goodall bad的一个内存地址,这个地址和all bad的地址是不同的,这个时候s指向前者,而s1仍指向后者,所以不同了