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

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

byte a = 23; a = a - 1; 

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

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

这样做。

 a = (byte)(a - 1); 

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

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

 a = (byte) (a - 1); 

a = a - 1; //这里在减法之前,a被提升为int数据类型,’a-1’的结果变为int,不能以字节forms存储(byte = 8bits和int = 32 bits)。

这就是为什么你必须将它强制转换为一个字节,如下所示:

 a = (byte) (a - 1); 

做这个:

 a -= 1; 

你甚至不需要显式转换,编译器/ JVM会为你做。

如果您将变量类型更改为int,则无人可以说,只提供您提供的信息。

变量类型由您计划使用它执行的任务定义。

如果你的变量a指责某人的手,为什么你会使用int? 字节类型绰绰有余。