6

当我们尝试使用增量运算符和加法运算符来增加字节变量时会发生什么。

public class A {
    public static void main(final String args[]) {
        byte b = 1;

        b++;

        b = b + 1;
    }
}

请给我来源,我们可以在哪里找到释放出来的这些小东西?请帮帮我。

4

4 回答 4

13

不同之implicit casting处在于++运算符 from intto中有一个byte,而explicitly如果您使用,则必须这样做b = b + 1

b = b + 1;  // Will not compile. Cannot cast from int to byte

你需要一个明确的演员:

b = (byte) (b + 1);

b++工作正常。运算符自动将++value 转换b + 1inta byte


这在JLS - §15.26.2 复合赋值运算符中明确列出: -

E1 op= E2 形式的复合赋值表达式等价于 E1 = (T) ((E1) op (E2)),其中 T 是 E1 的类型,除了 E1 只计算一次


请注意,操作b + 1会给你一个类型的结果int。因此,这就是为什么您需要在第二个作业中进行显式转换的原因。

于 2012-11-19T11:22:48.583 回答
3

发生什么了?实际上b = b + 1不会编译。

您必须将其显式转换为byte,因为b + 1计算结果为int。并且不能保证 aint可以放入 abyte中。

b = (byte)(b + 1);

于 2012-11-19T11:18:51.523 回答
0

变量将增加两次

于 2012-11-19T11:18:24.263 回答
0

b++; b=b+1;是等价的并且会产生相同的字节码。

在 main 方法完成之前,b 将等于 3。

编辑:实际上它们并不等效: b=b+1; 是错误的,应该是 b=(byte) (b+1); [强制转换为字节,否则为 int]

于 2012-11-19T11:19:07.373 回答