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

时间:2013-03-20 20:00:14

标签: java byte

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

byte a = 23;
a = a - 1;

编译器给出了这个错误: Test.java:8:可能发现精度损失:int required:byte              a = a - 1;                    ^ 1错误

Casting无法解决错误... 为什么编译器不允许我这样做? 我是否需要将变量'a'转换为int?

4 个答案:

答案 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?类型字节足以满足要求。