为什么我需要在此示例中使用变量转换?
byte b = -123;
b = (byte) ~b;
当我尝试编译它而不进行强制转换时,我得到:
NotDemo.java:17: error: possible loss of precision
答案 0 :(得分:4)
因为~b会在应用〜。
之前将b转换/提升为int实际上无形的事情是这样的。
~((int)b);
所以结果是int。
所以你需要把回送到字节。
有关详细信息,请参阅JLS。
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.15.5
答案 1 :(得分:4)
因为对于大多数Java运算符(包括~
),在应用运算符之前整数操作数为promoted。因此byte
被提升为int
;你的代码等同于:
b = (byte) ~((int) b);
因此,通常,分配回byte
将丢失高位信息。 (虽然在这种情况下它毫无意义。)