Java 输出中的任何(双相等)=文本均不打印。它只打印布尔值的输出

Java 输出中的任何(双相等)=文本均不打印。它只打印布尔值的输出,java,Java,dooble equals SOP没有得到文本的输出,这是它唯一的输出布尔值。我使用的是jdk1.7.079 class Test{ public static void main(String[] args) { String s4 = new String("check"); Thread t = new Thread(); System.out.println(" s4== t " + t == s4); } }

dooble equals SOP没有得到文本的输出,这是它唯一的输出布尔值。我使用的是jdk1.7.079

class Test{  
    public static void main(String[] args) { 

        String s4 = new String("check"); 
        Thread t = new Thread();

        System.out.println(" s4== t " + t == s4); 
    }
}
预期输出:
s4==t false

实际值为:
false

在java中,
+
运算符的优先级高于
=

因此表达式
“s4==t”+t==s4
将被计算为
(“s4==t”+t)==s4
,即
false

此外,
Thread
String
是不可比较的类型。所以即使你把它改成

System.out.println((" s4 == t " ) + (t == s4)); 
你会得到一个编译错误,抱怨这一点

最后,这将为您提供您想要的结果:

System.out.println((" s4 == t " ) + (t.toString() == s4)); 

t==s4
比较将始终返回false,因此它毫无意义(即使用括号括起来)。将线程对象与字符串对象进行比较,您希望得到什么布尔结果?(s4==t+t==s4)打印<代码>系统输出打印LN(((“s4==t”+t)==s4),即
false
您的表达式被解释为
(“s4==t”+t)==s4
,即
false
。执行
“s4==t”+(t==s4)
并没有真正的帮助,因为它不会编译。但是,您可以执行
objects4=新字符串(“检查”);对象t=新线程();System.out.println(“s4==t”+(t==s4))这确实会给出您期望的输出。它是如何通过更改对象而不是字符串和线程来工作的,即对象s4=新字符串(“检查”);对象t=新线程();请解释一下