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

Java 字节算术:如何减去一个字节变量?,java,byte,Java,Byte,当我尝试做这样的事情时,我遇到了一个错误: 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 math中,在计算之前,所有内容都至少提升为一

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

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 math中,在计算之前,所有内容都至少提升为一个
int
。这称为(JLS 5.6.2)。这就是编译器找到
int
的原因。要解决此问题,请将整个表达式的结果强制转换回
字节

a = (byte) (a - 1);

a=a-1//在此之前,减法a升级为int数据类型,“a-1”的结果变为int,不能以字节形式存储为(字节=8位,int=32位)

这就是为什么您必须将其转换为一个字节,如下所示:

a = (byte) (a - 1);
这样做:

a -= 1;
您甚至不需要显式强制转换,编译器/JVM将为您完成这项工作

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

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


如果您的变量a计算某人手上的手指数,为什么要使用int?键入byte就足够了。

这已经被问了几百次了。再见,谢谢!我在“1”中应用了强制转换,而不是表达式的结果,这是我的错误。再次感谢。