A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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
为什么是,什么原理?

4 个回复

正序浏览
http://m.blog.csdn.net/blog/xdhehao/38307767
这里我找了一篇文章,应该对你有帮助,我也顺便学习了:)
回复 使用道具 举报
== 对于基本数据类型判断的是它们的值,对于引用数据类型判断的是它们的内存地址(是否同一对象)。

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

有关字符串的创建机制我也不是非常懂,如有不对请多多指教。
回复 使用道具 举报
楼上正解了。第二个很容易理解。第一个比较的是引用地址
回复 使用道具 举报
==符号判断的是变量的本身,也就是说s3 == s1 + s2中,==判断的是s3和s2+s1的引用地址。所以结果为false,如果写作s3.equals(s1+s2)的话,判断内容结果就为true
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马