问题可以归结为以下代码:
// setup
String str1 = "some string";
String str2 = new String(str1);
assert str1.equals(str2);
assert str1 != str2;
String str3 = str2.intern();
// question cases
boolean case1 = str1 == "some string";
boolean case2 = str1 == str3;
Java标准是否对
case1
和case2
的值提供任何保证?当然,链接到Java规范的相关部分会很好。
是的,我查看了SO发现的所有“相似问题”,但没有发现重复项,因为我没有发现以这种方式回答了该问题。不,这不是关于通过用
equals
替换==
来“优化”字符串比较的错误观念。 最佳答案
这是您的JLS报价Section 3.10.5:
package testPackage;
class Test {
public static void main(String[] args) {
String hello = "Hello", lo = "lo";
System.out.print((hello == "Hello") + " ");
System.out.print((Other.hello == hello) + " ");
System.out.print((other.Other.hello == hello) + " ");
System.out.print((hello == ("Hel"+"lo")) + " ");
System.out.print((hello == ("Hel"+lo)) + " ");
System.out.println(hello == ("Hel"+lo).intern());
}
}
class Other { static String hello = "Hello"; }
package other;
public class Other { static String hello = "Hello"; }
结合JavaDoc作为实习生,您就有足够的信息可以推断出两种情况都将返回true。