Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java S3==S4返回为false,两者都指向SCP中的同一字符串,请说明原因_Java_String - Fatal编程技术网

Java S3==S4返回为false,两者都指向SCP中的同一字符串,请说明原因

Java S3==S4返回为false,两者都指向SCP中的同一字符串,请说明原因,java,string,Java,String,我试图验证引用是否与下面的代码相同 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("y

我试图验证引用是否与下面的代码相同

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时,将在堆中创建一个条目,其中包含REREREFENCE S1,在scp中创建另一个条目,但不包含out引用

现在,当我创建S3时,它将指向SCP中为s1创建的现有值,在SCP中,当我定义S4时,它也将指向SCP中现有的YCCM值。 但是,当我打印S3==S4时,它返回false。请让我知道你的行为


a+b==c
被解析为
(a+b)==c
,而不是
a+(b==c)
。也就是说,在比较的周围需要括号。

a+b==c
被解析为
(a+b)==c
,而不是
a+(b==c)
。也就是说,您需要在比较前后加上括号。

请按以下方式更新您的方法:

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("---------------------");
}
s1==s2: is false
s1==s3: is false
s3==s4: is true
---------------------
您将获得如下输出:

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("---------------------");
}
s1==s2: is false
s1==s3: is false
s3==s4: is true
---------------------

注意:连接时使用大括号

请按以下方式更新您的方法:

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("---------------------");
}
s1==s2: is false
s1==s3: is false
s3==s4: is true
---------------------
您将获得如下输出:

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("---------------------");
}
s1==s2: is false
s1==s3: is false
s3==s4: is true
---------------------

注意:在连接时,无论何时使用
字符串
,都要使用大括号,避免在sysout中添加任何其他硬编码的
字符串
,以避免不必要的连接。或者在连接
字符串
变量时使用大括号。在您的情况下,
(s3==s4)
将产生所需的结果

无论何时使用
字符串
,都不要在sysout中添加任何其他硬编码的
字符串
,以避免不必要的连接。或者在连接
字符串
变量时使用大括号。在您的情况下,
(s3==s4)
将产生所需的结果

必须加以考虑

表达式
“s1==s2:is”+s1==s2
将被解释为
(“s1==s2:is”+s1)==s2
,这是,
“s1==s2:是你不能改变我!”==“你不能改变我!”
,正如中所指出的那样,这是
错误的


编辑 有趣的是,表达式“s1==s2:is you cant change me!”==“you cant change me!”
被评估为
false
,这不仅是因为这些值,而且因为它们必须被考虑进去

表达式
“s1==s2:is”+s1==s2
将被解释为
(“s1==s2:is”+s1)==s2
,这是,
“s1==s2:是你不能改变我!”==“你不能改变我!”
,正如中所指出的那样,这是
错误的


编辑
有趣的是,表达式“s1==s2:is you cant change me!”==“you cant change me!”
被计算为
false
不仅是因为值,而且是因为它们。

由于新的运算符,两个字符串不相等

字符串s1=新字符串(“你不能改变我!”); 字符串s2=新字符串(“你不能改变我!”)

这将是平等的 String s1=“你不能改变我!”; String s2=“你不能改变我!”


Asit将引用字符串池中的同一对象

由于新运算符,两个字符串不相等

字符串s1=新字符串(“你不能改变我!”); 字符串s2=新字符串(“你不能改变我!”)

这将是平等的 String s1=“你不能改变我!”; String s2=“你不能改变我!”


Asit将引用字符串池中的同一个对象

您的逻辑是正确的,但这里的技巧是

String s3 = "you cant change me!"
String s4 = "you cant change me!";
System.out.println("s3==s4: is "+s3==s4);
第一个附加字符串
s3==s4:is
到s3,然后进行比较

简单地说

System.out.println("s3==s4: is "+s3==s4); 

String s5 = "s3==s4: is "+s3;
System.out.println(s5==s4)
如果你只打印

System.out.println(s3==s4); result will be true

希望我是对的。

你的逻辑是正确的,但关键在于

String s3 = "you cant change me!"
String s4 = "you cant change me!";
System.out.println("s3==s4: is "+s3==s4);
第一个附加字符串
s3==s4:is
到s3,然后进行比较

简单地说

System.out.println("s3==s4: is "+s3==s4); 

String s5 = "s3==s4: is "+s3;
System.out.println(s5==s4)
如果你只打印

System.out.println(s3==s4); result will be true

希望我是对的。

@sn42这一次,不是重复。提示:
System.out.println(“s1==s2:is”+s1==s2)
将打印
false
,而不是像预期的那样打印
s1==s2:is false
。除了@manish:best之外,最好只看一次@sn42,而不是重复。提示:
System.out.println(“s1==s2:is”+s1==s2)
将打印
false
,而不是像预期的那样打印
s1==s2:is false
。除了@manish:best是查看public void testString(){String s1=new String(“你不能更改我!”);String s2=new String(“你不能更改我!”);System.out.println(-->“+s1==s2);System.out.println(----------------”);final String s3=“你不能改变我!”;System.out.println(“第二”+(s1==s3));System.out.println(“第二”+(s1==s3));String s4=“你不能改变我!”;System.out.println(“第三”+(s3==s4));System.out.println(“第四”;}public void testString(){String s1=新字符串(“你不能改变我!”);String s2=新字符串(“你不能改变我!”);System.out.println(“-->”+s1==s2);System.out.println(“--------------”;最后一个字符串s3=“你不能改变我!”;System.out.println(“第二个”+(s1==s3));System.out.println(“-----------”;字符串s4=“你不能改变我!”;System.out.println(“第三个”+(s3==s4));System.out.println(”---------------------");}