String a="A";
String b="B";
final String c="C";
final String d="D";
String e=a+b;
String f=a+b;
System.out.println(e==f);//false
String g=c+d;
String h=c+d;
System.out.println(g==h);//true
为什么会这样?字符串对象创建在一个特殊的内存中,称为字符串常量池。但是这里final变量的意义是什么。
最佳答案
final 关键字可防止您重新分配 变量给字符串的不同实例。因此,虽然 String
本身是不可变的,但引用它的变量可以更改,除非明确标记为 final。
现在,我不太确定您在这里遇到的确切语义。但一般来说,由于变量是最终变量,c+d
现在可以被视为编译器常量(它永远不能有 "CD"
以外的值。该值是在编译时计算的,它本身可以被视为一个常量,被放入驻留字符串池中。
关于java - 最终引用变量的重要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9083931/