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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

String s1 = "a";

     String s2 = s1 + "b";

     String s3 = "a" + "b";

     System.out.println(s2 == "ab");

     System.out.println(s3 == "ab");
为什么第一条语句为false 第二条语句为true

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

3 个回复

正序浏览
程序在运行的时候会创建一个字符串缓冲池
String s3 = "a" + "b";等于 String s3 = "ab"; 当拿s3和"ab"用==比较时 程序先在缓冲池里找,有就不创建了所以相等
String s3 = "a" + "b";  String s4="a" + "b";  s3==s4结果是true;
而String s2 = s1 + "b"; s1是"a"的引用 对于String s2 = s1 + "b";和String s3 = "a" + "b"; 分配的地址是不一样的 所以不相等;
==比较的是对象是否相同
equals比较的是对象的内容 如果用equals结果就都是true;

点评

==比较的是两个对象的地址值  发表于 2012-6-2 18:37

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
== 比较的是地址值 是否一样。
"a"  有一个地址值  s1 + "b" 有一个地址值,它里面有个s1的引用指向 "a",  "a" + "b" 是一个地址值 他里面装的就是a和b
回复 使用道具 举报
字符串先从常量池里面找,第一次找ab没有,返回false,第二次比较时有ab拿过来直接用,所以地址值是同一个返回的是true
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马