黑马程序员技术交流社区

标题: 为什么第一条语句为false 第二条语句为true [打印本页]

作者: 陈波    时间: 2012-6-2 17:07
标题: 为什么第一条语句为false 第二条语句为true
String s1 = "a";

     String s2 = s1 + "b";

     String s3 = "a" + "b";

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

     System.out.println(s3 == "ab");
为什么第一条语句为false 第二条语句为true
作者: 丰亚彬    时间: 2012-6-2 17:10
字符串先从常量池里面找,第一次找ab没有,返回false,第二次比较时有ab拿过来直接用,所以地址值是同一个返回的是true
作者: 黄克帅    时间: 2012-6-2 17:59
== 比较的是地址值 是否一样。
"a"  有一个地址值  s1 + "b" 有一个地址值,它里面有个s1的引用指向 "a",  "a" + "b" 是一个地址值 他里面装的就是a和b

作者: 胡团乐    时间: 2012-6-2 18:26
程序在运行的时候会创建一个字符串缓冲池
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;





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