java - S3==S4 返回为假,两者都指向 SCP 中的相同字符串,请说明原因
问题描述
我正在尝试验证引用是否与以下代码相同。
package com.test.oracleinterviewquestions;
public class StringTest {
public static void main(String args[]){
StringTest obj=new StringTest();
obj.testString();
}
public void testString(){
String s1=new String("you cant change me!");
String s2=new String("you cant change me!");
System.out.println("s1==s2: is "+s1==s2 );
String s3="you cant change me!";
System.out.println("s1==s3: is "+s1==s3);
String s4="you cant change me!";
System.out.println("s3==s4: is "+s3==s4);
System.out.println("---------------------");
}
}
让我们将这些值称为“yccm”的简称,即“你不能改变我!”。在创建 S1 时,将在堆中创建一个具有引用 s1 的条目,并在 scp 中创建另一个条目,但没有引用。
现在,当我创建 S3 时,它将指向 SCP 中为 s1 创建的现有值,在 scp 中,当我定义 S4 时,它还将指向 SCP 中现有的 YCCM 值。但是,当我打印 S3==S4 时,它返回 false。请让我知道这是什么行为
解决方案
a+b==c
被解析为(a+b)==c
,不是a + (b==c)
。即,您需要在比较周围加上括号。