如果我写
String s1 = "True";
String s2 = "True";
s1 == s2将返回true。在编译期间,据我所知,一个'字符串池'已创建,其中以这种方式创建的字符串结束。在创建s2时,编译器将检查字符串池中是否存在所述字符串,如果存在这样的字符串,则指向相同的字符串。
String s3 = new String("False");
String s4 = new String("False");
s3 == s4将返回false。使用new命令创建的对象将在堆空间中创建。因此,这些产生两个对象并指向不同的字符串,尽管它们的内容'''相同。 (s3.equals(s4)将返回true)。
现在,这是我不明白的。
String s5 = "False";
String sx = ""F";
String s6 = sx + "alse";
这会返回false,我不明白为什么。这些字符串都应该在编译期间创建,最后在字符串池中,不是吗? s5应该在stringpool中生成一个对象,sx应该在stringpool中生成一个对象。我确信这一点,但是s6究竟是如何创建它的对象的呢?
据我了解,字符串文字的连接在编译期间发生,例如 String s1 =" True&#34 ;;字符串s2 =" T" +" rue&#34 ;; s1 == s2返回true,因为jvm检查字符串池是否为" True"。
谢谢!
编辑:这个问题不同,因为我检查的线程没有解决我首先创建两个字符串并使用前两个引用之一和另一个字符串创建第三个字符串的情况,例如sx +" alse& #34;上方。