2

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

byte a = 23;
a = a - 1;

编译器给出了这个错误: Test.java:8: possible loss of precision found : int required: byte a = a - 1; ^ 1 个错误

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

4

4 回答 4

6

这样做。

a = (byte)(a - 1);

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

于 2013-03-20T20:00:47.593 回答
5

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

a = (byte) (a - 1);
于 2013-03-20T20:02:06.860 回答
3

a = a - 1;// 这里在减法之前将 a 提升为 int 数据类型,并且 'a-1' 的结果变为 int,不能存储在 byte 中(byte = 8bits and int = 32 bits)。

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

a = (byte) (a - 1);
于 2013-03-20T20:02:53.617 回答
1

做这个:

a -= 1;

您甚至不需要显式转换,编译器/JVM 会为您完成。

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

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

如果您的变量 a 计算某人手上的手指,您为什么要使用 int?字节类型已经足够了。

于 2013-03-20T20:08:16.673 回答