黑马程序员技术交流社区

标题: 大牛解释下这道面试题 [打印本页]

作者: jaunce    时间: 2015-8-26 07:51
标题: 大牛解释下这道面试题
public static void main(String[] args) {
        String s1 = "a";
        String s2 = "b";
        String s3 = "ab";
        System.out.println(s3 == s1 + s2);  //false
        System.out.println(s3 == "a" + "b");  //ture





作者: 巧克黑力    时间: 2015-8-26 08:26
s1s2是两个对象
作者: javazhang    时间: 2015-8-26 16:36
本帖最后由 javazhang 于 2015-8-26 16:39 编辑

s1,s2分别是字符串常量池中的两个变量所对应的地址值,相加肯定和s3的地址值是不同的,而字符串相加后的内容都是ab,同样是方法区常量池的一个变量,指向同一个地址值,故前者为false后者为true
作者: 哈皮哈皮doge    时间: 2015-8-26 22:29
“a”+"b"编译器会优化为ab,所以认为和s3是同一个;s1+s2属于字符串变量之间相加,会新产生一个StringBuilder类的对象,并用append方法将s1和s2拼接起来,显然s3和新产生的这个对象的地址不一样
作者: 心之谷96    时间: 2015-8-26 22:39
System.out.println(s3 == s1 + s2);
两个字符串对象相加等于另外一个字符串对象,有没有觉着奇怪?




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