一道容易犯错的Java String面试题

分析下面这段代码,说明总共创建了多少个对象?程序的输出结果是什么?

public class Demo {
    public static void main(String[] args) {
        String a = "hello";
        String b = "abc";
        String c = a + b;
        String d = "hello" + "abc";
        System.out.println(c == d);
    }
}

这里面第三句话,底层调用的顺序是:

StringBuilder sb = new StringBuilder();
sb.append(a);
sb.append(b);

sb是在堆中,并且append是在原来字符串的基础上追加的,最后相当于c指向的堆中的对象。

重要规则:

第四句话,两个字符串常量相加,变量直接指向池中的对象;而只要涉及字符串变量相加,最后的变量将会实际指向堆中新建的对象。

因此本段程序输出的结果是false。

posted @ 2022-11-16 19:47  Pluto_Evans  阅读(42)  评论(0)    收藏  举报