明らかに、!b instanceof SomeType
(read: "negate b
, then check if the results value is of Type SomeType
") のような式は、Java ではあまり意味がありません。
論理的にb
は、ある種のブール オブジェクトである必要があり (それが!
機能するように)、その値を否定したとしても、以前と同じ型のブール値のままになるので、なぜそもそも否定する必要があるのでしょうか?
(実際には、それを行うことさえできません。実際の である必要があるためb
、 a にすることはできませんが、が a の場合でも、まだプリミティブに評価されるため、機能しません。)boolean
instanceof
Object
b
Boolean
!b
boolean
instanceof
!b instanceof SomeType
したがって、Java ではセマンティックな意味はまったくないと言えます。したがって、その意味を「b
型ではないかどうかを確認する」に再割り当てできSomeType
ます-できませんか?
これが意味的に変更された可能性があり、まだ行われていないことを考えると、これは実際には意図的ではなかったという結論になりますが、 の優先順位を低くするより実用的な理由がありましたinstanceof
。
instanceof
頭のてっぺんから、単項演算子よりも高い優先順位を与えると、解析が複雑になるのではないかと思います!
。あなたはそれを確認したいかもしれません。
一方、 ifは「が型ではない!b instanceof SomeType
かどうかを確認する」ことを意味しますが、初心者のプログラマーは、実際には の結果を否定するときに で動作するように思わせる可能性があるため、本質的に未定義のままにしておく方が曖昧ではありません。b
SomeType
!
b
instanceof
!b instanceof SomeType