Java 输出中的任何(双相等)=文本均不打印。它只打印布尔值的输出
dooble equals SOP没有得到文本的输出,这是它唯一的输出布尔值。我使用的是jdk1.7.079Java 输出中的任何(双相等)=文本均不打印。它只打印布尔值的输出,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); } }
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=新线程();请解释一下