黑马程序员技术交流社区

标题: 号外!!!String不变类和引用类型的值传递??? [打印本页]

作者: 青龙李坤    时间: 2015-5-26 23:21
标题: 号外!!!String不变类和引用类型的值传递???
public class StringTest {
        //牢记String是不可变类
        public static void main(String[] args) {
        StringBuffer a=new StringBuffer("A");
        StringBuffer b=new StringBuffer("B");
              operate(a,b);
        System.out.println(a+":"+b);
        }
  public static void operate(StringBuffer a,StringBuffer b){
          a=a.append(b);
        b=a;
  }
}
输出结果:AB:A
图是自己画的!!!



作者: thoris    时间: 2015-5-27 00:03
首先结果楼主打错了

方法部分b=a是改变了指向 但是并没有返回,所以没有用。
但是append不一样,当a=a.append(b)的时候,这个时候单一的字符串A就不在了,变成了AB了,所以原来的a的指向没变,只是指向的对象变了。

测试了以下代码
                StringBuffer a=new StringBuffer("A");
                 System.out.println(a.hashCode());
                StringBuffer b=new StringBuffer("B");
                      operate(a,b);
                      
                System.out.println(a+":"+b);
                System.out.println(a.hashCode());
结果:
366712642
AB:B
366712642

作者: 青龙李坤    时间: 2015-5-27 00:11
我画的就是a没变,指向的对象的内容变为了AB,仔细看一下,可能我画的看着有点歧义,只是为了方便展示append();之后对象的内容。
作者: 青龙李坤    时间: 2015-5-27 00:14
大家都看看相互理解一下吧,再交流探讨一下,这个知识点挺不错的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2