黑马程序员技术交流社区

标题: 有没有知道这道原理的啊,大神们求解啊、 [打印本页]

作者: 南柯一梦境    时间: 2015-5-27 00:27
标题: 有没有知道这道原理的啊,大神们求解啊、
String s1 = "a";
        String s2 = "b";
        String s3 = "ab";
        System.out.println(s3 == s1 + s2);//false
        System.out.println(s3 == "a" + "b");//true
在这里的:
System.out.println(s3 == s1 + s2);//false
为什么是,什么原理?
作者: 马也keyboard    时间: 2015-5-27 09:26
==符号判断的是变量的本身,也就是说s3 == s1 + s2中,==判断的是s3和s2+s1的引用地址。所以结果为false,如果写作s3.equals(s1+s2)的话,判断内容结果就为true
作者: 半世心修    时间: 2015-5-27 09:56
楼上正解了。第二个很容易理解。第一个比较的是引用地址
作者: alumina    时间: 2015-5-27 10:28
== 对于基本数据类型判断的是它们的值,对于引用数据类型判断的是它们的内存地址(是否同一对象)。

s3 == s1 + s2 这里s1与s2都是独立对象,相加为一个新对象new String.
而‘a’与‘b’两个字符常量相加等于"ab"本身。

有关字符串的创建机制我也不是非常懂,如有不对请多多指教。
作者: alumina    时间: 2015-5-27 10:33
http://m.blog.csdn.net/blog/xdhehao/38307767
这里我找了一篇文章,应该对你有帮助,我也顺便学习了:)




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