我正在尝试理解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
,它们都是指向常量池中相同的值"Love!"。
s
也是指向常量池中的值,但它指向的是"e!"。
我明白str1 != s
。
我知道str3
和str4
是指向堆(heap)中的引用,并且它们各自指向不同的对象。 str3 != str4
。
但是,我不明白为什么str1 != str7
,希望得到解释。
str1 == str4
,那么你需要忘记你认为自己知道的,因为它并不是这样。str3
、str4
和str7
都是独立的三个对象。 - Andreasstatic final
常量)。s
是一个变量,这就是为什么str7
不符合该情况的原因。 - ajbs
不是常量,所以str7
是一个新字符串。 - Andreas