为什么以下有效
byte i=0;
i++;
如下无效
byte i=0;
i=i+1;
这是什么原因?
我知道在i+1
整个值显式增加1(将是int
值)的情况下,将发生编译问题,但在i++
相同的情况下却没有得到任何错误。
每当您在两个不同类型的操作数之间执行二进制运算时,其中一个操作数将被提升为更高类型。然后,运算结果就是该类型。
因此,在您的情况下,byte
类型a首先被提升为int
,因为1
它是int
类型。然后在加法运算之后,结果为type int
。现在,由于您无法将分配int
给byte
,因此您需要进行类型转换以消除编译器错误:
byte a = 2;
a = a + 1; // Error: Cannot assign an int value to byte
a = (byte)(a + 1); // OK
现在,对于复合赋值运算符,类型转换将为您隐式完成。表达方式:
a += 1
在内部转换为:
a = (byte)(a + 1);
这是在JLS- §15.26.2复合赋值运算符中指定的:
A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T) ((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.
前缀增量运算符和后缀增量运算符的情况相似。
根据JLS- §15.15一元运算符:
The type of the prefix increment expression is the type of the variable.
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句