我试图理解Java中的参考比较。 我们假设我们有以下主要代码:
public static void main (String args[]) {
String str1 = "Love!";
String str2 = "Love!";
String str3 = new String("Love!");
String str4 = new String("Love!");
String str5 = "Lov"+ "e!";
String str6 = "Lo" + "ve!";
String s = "e!";
String str7 = "Lov"+ s;
String str8 = "Lo" + "ve!";
String str9 = str1;
}
我理解str1 == str2 == str5 == str6 == str8 == str9
和所有这些都是对公共池的引用。 (价值"爱!")。
s
也是对公共池的引用,但它引用了值" e!"
我也理解str1 != s
。
我知道str3
,str4
是对HEAP的引用,并且每个都是不同的对象。 str3 != str4
。
我不明白为什么 str1 != str7
,,我很想得到解释。
答案 0 :(得分:13)
在
String s = "e!";
String str7 = "Lov"+ s;
虽然"e!"
是常量表达式,但s
不是常量变量(JLS §4.12.4);因此,引用"Lov" + s
的{{1}}不能是常量表达式(JLS §15.28)。为了使s
之类的变量成为常量变量,它必须同时为s
并从常量表达式初始化。
如果你写过
final
然后final String s = "e!";
String str7 = "Lov" + s;
就是真的。