判定やいかに

Java 1.5 ということでひとつ。

     (Byte) (byte)-1 ==      (Byte) (byte)-1
(Character) (char)-1 == (Character) (char)-1
    (Short)(short)-1 ==     (Short)(short)-1
  (Integer)  (int)-1 ==   (Integer)  (int)-1
     (Long) (long)-1 ==      (Long) (long)-1
 (byte)-1e100 <  (byte)+1e100
 (char)-1e100 <  (char)+1e100
(short)-1e100 < (short)+1e100
  (int)-1e100 <   (int)+1e100
 (long)-1e100 <  (long)+1e100
-0.0 / 0.0 < +0.0 / 0.0
      -0.0 < +0.0

最初のグループは、Byte、Short、Integer のものが true で、他は実装依存。規定により、boolean 値、byte 値、127 以下の char 値、-128 以上 127 以下の short および int 値に関しては、boxing の結果が必ずキャッシュされます。

次のグループは、byte と short のものが false で、他は true。(long)-1e100 と (long)+1e100 はそれぞれ Long.MIN_VALUE と Long.MAX_VALUE に評価されます。int に関しても同様。浮動小数点数から byte、char、short への縮小変換は一旦 int を経由するので、たとえば (byte)-1e100 = (byte)Integer.MIN_VALUE = 0 のように変な結果が得られます。

最後のグループ。上のは NaN との比較なので問答無用で false。下の方は、比較演算子が正負のゼロを区別しない*1ため、やはり false。

*1:ただし、Double.compare() や Math.min() などは、負のゼロを正のゼロよりも真に小さいと判断する。