2017-08-15 34 views
0

我知道,在默认情况下的数字存储为整数Java编写,但Java中的速记运算符如何与普通运算符不同?

byte x = 10; 
x = x + 10; 

是给错误而

byte x = 10; 
x += 10; 

正在编制精细

+0

当你做+ =这是一个复合语句,编译器内部转换它。在第一种情况下,由于它是直接声明,因此编译器直接向您大喊:) –

+0

thanks @ꜱᴜʀᴇꜱʜᴀᴛᴛᴀ –

回答

2

JLS有一个答案你

E1形式的复合赋值表达式op = E2相当于E1 =(T)((E1)op(E2)),其中T是E1的类型,只是E1只评估一次。

short x = 3; 
x += 4.6; 

,并导致X具有值7,因为它等同于:

short x = 3; 
x = (short)(x + 4.6); 

所以你的情况你的第二个声明equlas到

x = (byte) x + 10; 

这就是原因所在编译器很高兴。