今日のポカ

ちょっとしたポカ。

 byte[] b = { (byte)8f, (byte)0xa2, (byte)0xc3 };
 assertTrue(Arrays.equals(b, "\u00a6".getBytes("x-eucJP-Open")));

\u00a60x8fa2c3に変換さるべきなので、上記assertが成立すべきところ、成立しなかった。

問題はこれ。

 (byte)8f

0xが抜けているだけだが、8fのfがfloatリテラルの接尾辞とみなされ、それがbyteにキャストされて普通にコンパイルできてしまっている。あほか。というか16進バイト列を書くのにキャストが必要なJavaリテラルの表現力が残念である。