我正在阅读以下概念interned strings
:
String s1 = "Hi";
String s2 = "Hi";
String s3 = new String("Hi");
System.out.println(s1 == s2); // true
System.out.println(s1 == s3); // false
System.out.println(s1.equals(s3)); //true
String 是 Java 中的一个对象,但是编译器允许我们使用字面量来分配 String 引用变量,而不是要求我们使用new
运算符,因为字符串在编程中无处不在。使用文字进行赋值会创建一个interned string
. 所有具有相同字面量的实习字符串都指向内存中的相同空间,因此允许使用等效运算符。
然而,这让我想知道:使用该equals()
方法比较两个字符串引用变量是否更合适,因为在 Java 中字符串是对象(而不是像其他语言中的数组)并且应该使用 equals 比较对象的内容(),因为==
关于对象的运算符只告诉我们它们指向内存中的同一个位置?
或者它不是更合适,因为实习字符串的概念清楚地表明,==
如果一个字符串共享相同的文字,则它们只能与另一个字符串等价()?
如果它更合适,人们通常会使用这种equals()
方法,还是认为它是矫枉过正?