Obiously,像!b instanceof SomeType
(讀:「否定b
,然後檢查結果值SomeType
型」)的表達式不作在Java中多大意義:
從邏輯上講,b
必須是某種的布爾對象(所以!
工作),即使你否定它的值,它仍然是一個布爾值,與以前相同的類型,所以爲什麼要首先否定它呢?
(實際上,你甚至不能做到這一點:b
不能是boolean
,因爲instanceof
要求它是一個真正的Object
,但話又說回來,如果b
是Boolean
,!b
仍然想要得到一個原始boolean
,因此instanceof
不起作用。)
因此,我們可以說!b instanceof SomeType
在Java中根本沒有語義含義。所以我們可以重新分配它的含義來「檢查b
是不是SomeType
」 - 我們不能嗎?
鑑於這可能已經改變語義,仍然沒有這樣做給我留下的結論是,這是不是真的故意的,但有一個更加務實的理由去與優先級低的instanceof
:
關閉我的頭頂,我會懷疑如果您給予instanceof
更高的優先級比一元運算符!
解析更復雜。你可能想檢查一下。
在另一方面,如果!b instanceof SomeType
將意味着「檢查b
是SomeType
類型不是」,這仍然可以欺騙新手程序員,以爲!
上b
操作時,實際上它否定了instanceof
的結果,所以它不太曖昧離開!b instanceof SomeType
本質上未定義。
來源
2013-09-08 17:56:32
tmh
這不應該在[programmers.stackexchange.com](http://programmers.stackexchange.com/)上結束嗎? – Adrian
@Adrian Imo這裏比較適合,我在程序員的描述中沒有看到關於語言理論的任何內容。 – Voo