如果我有一个字节变量: byte b = 0;
为什么以下工作:
b++;
b += 1; // compiles
Run Code Online (Sandbox Code Playgroud)
......但这不是吗?
b = b + 1; // compile error
Run Code Online (Sandbox Code Playgroud)
编译器首先理解为byte
第二个和第二个int
吗?
[编辑]
我知道铸造,但我想引起你的注意 b++, b += 1 and b = b + 1
我认为它们是平等的,为什么编译器会有所不同?有什么区别
b += 1 and b = b + 1 ?
Run Code Online (Sandbox Code Playgroud)
axt*_*avt 25
因为b += 1
是等价的b = (byte)(b + 1)
,而类型b + 1
被提升为int
(JLS§5.6.2二进制数字促销),因此byte
如果没有显式转换,其结果将无法分配.
形式E1 op = E2的复合赋值表达式等效于E1 =(T)((E1)op(E2)),其中T是E1的类型,除了E1仅被评估一次.
归档时间: |
|
查看次数: |
7327 次 |
最近记录: |