问题可以归结为以下代码:

// 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标准是否对case1case2的值提供任何保证?
当然,链接到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。

09-30 14:57