回答
a == b
是为 true 的。
因为 "a" + "b"
是一个字符串常量表达式,Java 编译器在编译时期就会将其优化,直接替换为结果 "ab"
。因此,String b = "ab"
。
所以 String a = "ab";
和 String b = "a" + "b";
实际上都会引用字符串常量池中的同一个 "ab"
字符串对象,如下:
而在 Java 中,如果两个字符串变量指向常量池中的同一个对象,则使用 ==
比较操作符会返回 true
。
Java 编译器为什么会有这种优化呢?主要是为了性能考虑,因为 "a" + "b"
这个字符串的值,在编译时就已经确定了,且不会变化。因此,编译器可以在编译时就执行这些表达式的计算,而不是等到运行时。这样做的好处减少了运行时的计算工作量,提供了程序的性能,同时也减少了内存的使用。
我们再看下面这个代码
String a = "ab";
String b = "c";
String c = "abc";
String d = a + b;