2017-04-01 179 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);