字符串引用?

M S*_*ach 3 java string

我们制作以下String对象?

String str1 = new String("ABC");
String str2 = new String("ABC");
String str3 = "ABC";
String str4 = "ABC";
Run Code Online (Sandbox Code Playgroud)

以上两个问题:

  1. system.out.println("valof str1 "+str1 );- 它打印str1为ABC但是当我们比较时if(str1==str2),它会比较字符串对象的参考.jvm如何达到差异?

  2. str1具有不同的充参考str2str3,但str3str4具有相同的引用,这样做的JVM检查,如果我们要以平等的运营商(而不是新)已经存在(如果它存在,它不会创建新的对象只是指定相同refernce新变量来建立一个字符串ie str4)但是在新操作员的情况下它不会做这个验证?

Chr*_*ung 11

在Java中,字符串文字(裸露"ABC"而不是new String("ABC"))被实习.也就是说,JVM中只存储了一个副本,并且始终是使用的副本.这就是他们在使用时比较平等的原因==.

以下比较也始终如一:

str1.intern() == str2.intern()
str1.intern() == str3
str2.intern() == str3
str1.intern() == str4
str2.intern() == str4
Run Code Online (Sandbox Code Playgroud)