一道容易犯错的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。

浙公网安备 33010602011771号