Java中的instanceOf运算符

4

为什么这行Java代码没有打印出信息?

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

为什么只打印true而不是它前面的字符串?

1
也许你应该告诉我们 a 是什么? - user180100
1
@RC:恰好,这并不重要。但是,一个[mcve]会更好。 - Jon Skeet
@JonSkeet 我看到了你的回答,所以在那种情况下确实没有关系 ;) - user180100
3个回答

8
啊,运算符优先级的乐趣。这行代码的实际效果是:
System.out.println(("a instanceof String:" + a) instanceof String);

...所以你正在做字符串连接,然后检查结果是否为字符串。因此,无论a的值如何,它都将始终打印true

你只需要添加括号。

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

请参阅Java运算符优先级列表的教程页面。


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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接