とあるプログラミング初心者の Java プログラムを見ていたら,
if( a <= b & a <= c) { .... }
みたいなコードが書かれていた.
はじめ見たときはC言語であればまったく問題ないコードだけど Java で論理演算の結果を bit 演算しちゃダメだろ,と考えていた.
しかしながら,実はこのコードはコンパイルも通るしちゃんと動く.int と boolean でキャストが自然に起こるようになったのかとも考えたが,実のところ & は boolean 同士をオペランドに取れるようにオーバロードされているだけだった.でもまあ,今までまったく知らなかったので少々驚きだった.
ちなみに,よく考えてみると AND を && でとると左のオペランドが false のときに右側のオペランドは評価されないので,これと対になって両方とも評価される & が存在することは当然だなぁと思う.うーむ,こんなことにも気づかずに何年間 Java 使ってたんだろ... 恥ずかしい
- Newer: AWK - はじめ