字节算术:如何减去字节变量?

mev*_*vqz 2 java byte

当我试图做这样的事情时,我收到了一个错误:

byte a = 23;
a = a - 1;
Run Code Online (Sandbox Code Playgroud)

编译器给出了这个错误:Test.java:8:可能发现精度损失:int required:byte a = a - 1; ^ 1错误

转换不能解决错误...为什么编译器不让我这样做?我是否需要将变量'a'转换为int?

Aja*_*y S 6

这样做.

a = (byte)(a - 1);
Run Code Online (Sandbox Code Playgroud)

a从其整数值中减去1时.因此,要以字节为单位分配结果,您需要进行显式类型转换.


rge*_*man 5

在Java数学中,int在计算之前,所有内容至少都会升为a 。这称为二进制数值提升(JLS 5.6.2)。这就是为什么编译器找到一个int。要解决此问题,请将整个表达式的结果转换回byte

a = (byte) (a - 1);
Run Code Online (Sandbox Code Playgroud)