3
public class Test {
    int multiple;
    public static void main(String[] args){

        String string1 = "string";
        String string2 = "string";
        String string4 = "Changed";

        String string3 = new String("string");

        System.out.println("string1 == string2: " + (string1 == string2));\\true
        System.out.println("string1 == string4: " + (string1 == string4));\\false
        System.out.println("string1 == string3: " + (string1 == string3));\\false

    }


}

我知道如果引用相同,==操作员将返回。true我想知道的是,Java 是否在创建对象之前检查字符串文字的内容?

4

2 回答 2

4

您将看到Java 字符串实习的副作用之一。从JLS §3.10.5

...字符串文字总是指代的同一个实例 class String。这是因为字符串文字 - 或者更一般地说,作为常量表达式的值的字符串(第 15.28 节) - 是“内部的”,以便使用 方法共享唯一实例String.intern

更多关于 SO 的阅读,尤其是:

于 2012-04-15T15:40:20.203 回答
3

执行字符串实习的是编译器。因此在编译时优化了相同的字符串。所以我认为你想要的答案是“不”。虚拟机不这样做,它是编译器。您可以调用String.intern()获取字符串池中的共享字符串对象:

String str1 = "string";
String str2 = new String("string");
String str3 = str2.intern();

str1 == str2 // false
str2 == str3 // false
str1 == str3 // true

字符串,在运行时构建不会自动实习。

于 2012-04-15T15:40:27.640 回答