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