Java FAQ:byte を unsigned byte として int と相互変換

Java FAQ:S007 Q-11

public class C2008032600 {
    public static void main(String[] args) {
        byte b;
        int  i;

        b = (byte)0xfd;
        i = b & 0xFF;
        System.out.println("b : " + b + " " + Integer.toHexString(b));
        System.out.println("b : " + i + " " + Integer.toHexString(i));


        i = 0xfd;
        b = (byte)i;
        System.out.println("b : " + b + " " + Integer.toHexString(b));
        System.out.println("b : " + i + " " + Integer.toHexString(i));
    }
}

で、

b : -3 fffffffd
b : 253 fd
b : -3 fffffffd
b : 253 fd
  • 「b = (byte)0xfd;」が「b = 0xfd;」だと「精度が落ちている可能性」とエラーに。リテラルが int だから???
  • Byte.toHexString ってないのか〜