public class Example {
public static void main(String[] args) {
String a = "abc"; // Line 5
String b = a + "d"; // Line 6
String c = "abc"+ "d"; // Line 7
String d = "abcd"; //Line 8
System.out.println(b==c); //Line 10
System.out.println(c==d); //Line 11
}
}
输出:
假
真
如果我们看到引用号。变量'b'指向“abcd”字符串对象和Ref。变量“c”也指向相同的 String 对象,即“abcd”,但是当我们使用 ==(双等于运算符)运算符检查相等性时,它会在第 10 行打印 false。变量 'a' 作为最终变量,然后在第 10 行打印 true
所以我有点困惑。谁能告诉我这背后发生了什么?
最佳答案
制作a
Final 允许编译器解释 b = a + "d";
完全像 c = "abc"+ "d";
,因为 a
的值无法更改。
在这种情况下,编译器可以很容易地看到 a
没有改变,但是 javac
不会进行非常复杂的代码分析,因此您需要通过制作 a
来帮助它Final 以便编译器在编译时进行优化。
关于java - 为什么这会根据变量的最终结果给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49655545/