2024-03-14  阅读(12)
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/8006677421

回答

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;