字符串相等与位置相等

Blo*_*rot 7 java string equality

String s1 = "BloodParrot is the man";  
String s2 = "BloodParrot is the man";  
String s3 = new String("BloodParrot is the man");  

System.out.println(s1.equals(s2));
System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s1.equals(s3));
Run Code Online (Sandbox Code Playgroud)

//输出



如果所有三个字符串具有相同的内容,为什么所有字符串都没有在内存中相同的位置?

Bil*_*ard 15

Java只会自动实现字符串文字.new默认情况下,不会禁用新的String对象(使用关键字创建).您可以使用String.intern()方法实现现有的String对象.调用intern将检查现有的String池以查找匹配的对象,如果存在则返回它,如果没有匹配则添加它.

如果添加该行

s3 = s3.intern();
Run Code Online (Sandbox Code Playgroud)

创建后立即使用您的代码s3,您将看到输出的差异.

查看更多示例和更详细的说明.

这当然提出了何时使用==以及何时equals在Java中使用该方法这一非常重要的主题.equals在处理对象引用时,您几乎总是想要使用.==运算符比较参考值,这几乎不是您要比较的意思.了解差异有助于您决定何时使用==或equals.