首页 > 解决方案 > 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。请让我知道这是什么行为

在此处输入图像描述

标签: javastring

解决方案


a+b==c被解析为(a+b)==c,不是a + (b==c)。即,您需要在比较周围加上括号。


推荐阅读