黑马程序员技术交流社区
标题:
号外!!!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
图是自己画的!!!
QQ图片20150526230958.jpg
(160.91 KB, 下载次数: 37)
下载附件
内存图是自己画的
2015-5-26 23:19 上传
作者:
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