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

Byte arithmetic: How to subtract to a byte variable?

本问题已经有最佳答案,请猛点这里访问。

当我尝试这样做时,我会出错:

1
2
byte a = 23;
a = a - 1;

编译器给出以下错误:Java:8:可能发现的精度损失:INT要求:字节A=A—1;^1误差

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


这样做。

1
a = (byte)(a - 1);

当你从a中减去1时,它的整数值。因此,要获得以字节为单位的分配结果,需要执行显式类型转换。


在Java数学中,在计算之前,所有的东西都被提升到至少一个EDCOX1×1。这被称为二进制数字提升(JLS 5.6.2)。所以编译器找到了一个int。要解决此问题,请将整个表达式的结果强制转换回byte

1
a = (byte) (a - 1);


a = a - 1;//这里减法a之前被提升为in t数据类型,"a-1"的结果变为int,不能以字节形式存储(byte=8位,int=32位)。

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

1
a = (byte) (a - 1);

这样做:

1
a -= 1;

您甚至不需要显式的强制转换,编译器/JVM将为您执行它。

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

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

如果你的变量A计算某人手上的手指,你为什么要用int?类型byte已经足够了。