ああ恐ろしきかな 暗黙の型変換
Javaにおいて
long hoge = 0xFFFFFFFF;
は-1になる。int型に0xFFFFFFFFを代入しようとするとNumberFormatException(定数の場合はそもそもコンパイルできない)がスローされるから、0xFFFFFFFFと書けばlong型と認識すると思ってた。しかしコンパイラは、接尾辞のない数値はとりあえずintにしちゃれ、ということになっているらしい。右辺をintと認識→左辺に合わせて符号拡張→代入、という流れと思うが、数値がすべからく符号つきであるJavaにおいて、このときだけ符号のついていない数値を負の数とする挙動は納得しがたい。
デバッグ中、正常データを入力してるのにエラーばっかり吐きやがるので何事かと思ったら、暗黙の型変換の罠にどっぷりはまっていた罠。-1とアドレスを比較したら、アドレスのほうが常に大きいに決まってるよね(´・ω・`)
正の数たる0xFFFFFFFFを代入しようと思ったら、0xFFFFFFFFLと書かなければダメらしい・・・