Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 打印字符串比较结果时获得奇怪的输出_Java_String - Fatal编程技术网

Java 打印字符串比较结果时获得奇怪的输出

Java 打印字符串比较结果时获得奇怪的输出,java,string,Java,String,我在这一行遇到了一个问题(评论如下): 输出false 但是,System.out.println(s3==s4)输出true 现在,我无法理解为什么我会得到这个结果: public class string { public static void main(String[] args){ String s3="Shantanu"; String s4=s3; String s1=new String("java"); S

我在这一行遇到了一个问题(评论如下):

输出
false

但是,
System.out.println(s3==s4)
输出
true

现在,我无法理解为什么我会得到这个结果:

public class string {
    public static void main(String[] args){
        String s3="Shantanu";
        String s4=s3;
        String s1=new String("java");
        String s2=new String("javaDeveloper");

        System.out.println("Using Equals Method::"+s1.equals(s2));
        System.out.println("Using Equals Method::"+s3.equals(s4));
        System.out.println("Using == ::"+s3==s4);//Problem is here in this line
        System.out.println(s1+"Directly printing the s2 value which is autocasted from superclass to string subclass ");
        System.out.println("Directly printing the s1 value which is autocasted from superclass to string subclass "+s2);
        System.out.println(s3);
    }
}
使用Equals方法的输出::false 使用Equals方法::true Using==::false java直接打印s2值,该值从超类自动转换为字符串子类 直接打印s1值,该值从超类自动粘贴到字符串子类javaDeveloper
您缺少一组括号:

System.out.println("Using == ::" + (s3==s4));
在您的版本中,
“Using==::”+s3
通过
=
s4
进行比较,这不是您想要的

一般来说,
+
的值高于
==
,这就是为什么
“Using==::”+s3==s4
被评估为
(“Using==::”+s3)==s4

行是正确的:

“使用==::”+s3
不等于
s4

您需要更改代码:

"Using == ::"+(s3==s4)
编辑: 给定代码的输出为:

Using Equals Method::false
Using Equals Method::true
false
javaDirectly printing the s2 value which is autocasted from superclass to string subclass 
Directly printing the s1 value which is autocasted from superclass to string subclass javaDeveloper
Shantanu

您正在使用以下代码:

System.out.println("Using == ::"+ s3==s4);
评估结果如下:

System.out.println( ("Using == ::" + s3) == s4);
因此,您将得到false作为输出

原因是根据运算符优先级
+
高于根据此
运算符优先级
表的
=

正如其他答案所说,您需要使用括号括住布尔表达式:

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

出于好奇,他的代码中计算的是什么?哦,我想我明白了,它比较了整个字符串+s3和s4,这显然是错误的。
(“使用==:“+s3)==s4
对通常的
问题进行了有趣的扭曲。
问题+1然后它应该打印“false”,而不是“Using=::false”。没有?@LeeMeador它实际上只打印假的;OP的输出与他的代码不一致。所以字符串串联比比较运算符具有更高的优先级?加上。。。如果只是比较,它为什么要打印文本字符串?根据这一点,它已经打印了。然后它应该打印“false”,而不是“Using=::false”。问题中的输出是错误的。我运行了指定的代码并得到了预期的输出(添加到我的答案中)。这是解释为什么输出是这样的最好解释,但如果解释如何修复它会更好。@Michelle:IMO首先我需要解释OP为什么输出错误,然后我的答案会更好地理解。现在请检查编辑。@roippi你是一个头发尖的老板吗?您的输出与代码不一致。第三行应该是
false
。请检查您发布的输出是否正确。显然,开头的字符“Output-”不会出现。加上最后一个
println
调用在打印
s3
时没有显示,中间的一行是可疑的。@roippi如果你雇佣某人,因为他们知道字符串串联比相等比较具有更高的优先级,你就应该得到你应得的。为什么不直接问那些FaceBook上的问题,“74%的人做不好。7+3x2是什么?”@LeeMeador你说得对。我也会偷偷问这个问题。谢谢
System.out.println( ("Using == ::" + s3) == s4);
System.out.println("Using == ::" + (s3==s4));