当我试图做这样的事情时,我收到了一个错误:
byte a = 23;
a = a - 1;
编译器给出了这个错误: Test.java:8:可能发现精度损失:int required:byte a = a - 1; ^ 1错误
Casting无法解决错误... 为什么编译器不允许我这样做? 我是否需要将变量'a'转换为int?
答案 0 :(得分:6)
这样做。
a = (byte)(a - 1);
从a
减去1然后是整数值。因此,要以字节为单位分配结果,您需要进行显式类型转换。
答案 1 :(得分:4)
在Java数学中,在计算之前,所有内容都被提升为至少int
。这称为Binary Numeric Promotion(JLS 5.6.2)。这就是编译器找到int
的原因。要解决此问题,请将整个表达式的结果强制转换回byte
:
a = (byte) (a - 1);
答案 2 :(得分:3)
a = a - 1;
//此处在减法之前,a被提升为int数据类型,'a-1'的结果变为int,不能以字节形式存储(byte = 8bits和int = 32位)。
这就是为什么你必须将它强制转换为一个字节,如下所示:
a = (byte) (a - 1);
答案 3 :(得分:0)
这样做:
a -= 1;
你甚至不需要显式转换,编译器/ JVM会为你做。
如果您将变量类型更改为int,则无人可以说,只提供您提供的信息。
变量类型由您计划使用它执行的任务定义。
如果你的变量a指责某人的手,为什么你会使用int?类型字节足以满足要求。