2017-04-01 61 views
4

为什么Java中的这行代码不打印消息?instanceOf java中的运算符

System.out.println("a instanceof String:"+a instanceof String); 

为什么它只是打印真正的而不是字符串呢?

+1

也许你应该告诉我们'a'是什么? – 2017-04-01 11:42:52

+1

@RC .:碰巧,没关系。但是,是的,[mcve]会更好。 –

+0

@JonSkeet我看到了你的答案,所以是的,在这种情况下并不重要;) – 2017-04-01 11:44:49

回答

8

啊,运营商优先级的乐趣。该行是有效的:

System.out.println(("a instanceof String:" + a) instanceof String); 

...所以你在做字符串连接,然后检查结果是否是字符串。所以它会总是打印true,不管值a

你只需要括号

System.out.println("a instanceof String:" + (a instanceof String)); 

的优先级列表,请参阅Java tutorial page on operators

3

如下您的代码会被执行:

System.out.println(("a instanceof String:"+a) instanceof String);

因此,整个字符串即("a instanceof String:"+a)一直被认为是为instanceof检查。

为了打印,"a instanceof String:true",你需要在正确的地方使用括号:

System.out.println("a instanceof String:" + (a instanceof String)); 
1

你必须使用括号。

System.out.println(("a instanceof String:"+a) instanceof String);