当我试图做这样的事情时,我遇到了一个错误:
byte a = 23;
a = a - 1;
编译器给出了这个错误: Test.java:8: possible loss of precision found : 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,不能存储在 byte 中(byte = 8bits and int = 32 bits)。
这就是为什么你必须将它转换为一个字节,如下所示:
a = (byte) (a - 1);
做这个:
a -= 1;
您甚至不需要显式转换,编译器/JVM 会为您完成。
如果您将变量类型更改为 int 没有人可以说,只有您提供的信息。
变量类型由您计划使用它执行的任务定义。
如果您的变量 a 计算某人手上的手指,您为什么要使用 int?字节类型已经足够了。