我们创建了以下String对象吗?
String str1 = new String("ABC");
String str2 = new String("ABC");
String str3 = "ABC";
String str4 = "ABC";
以上有两个问题:
system.out.println("valof str1 "+str1 );
-- 它会将str1
输出为 ABC 但是当我们比较if(str1==str2)
时,它会比较字符串对象的引用。JVM 如何区分呢?str1
和str2
有不同的引用,而str3
和str4
则有相同的引用,那么 JVM 是否会检查我们要用等号运算符创建的字符串是否已经存在(如果存在,则不会创建新的对象,只会将相同的引用赋给新变量,即str4
),但是在使用 new 运算符的情况下,它并不进行这种验证吗?
==
进行比较时才需要将其内部化。否则,无论您是内部化字符串还是不内部化字符串都没有区别。 - C. K. Young