2013-02-27 3 views
2

Например:Разница между переменной + = значением и переменной = переменной + значением;

int a = 10; 
a += 1.5; 

Это отлично работает, но

a = a+1.5; 

это назначение говорит Type mismatch: cannot convert from double to int. Так что мой вопрос: в чем разница между += operator и = operator. Почему первое задание ничего не говорило, а второе. Пожалуйста, объясните мне. Просто я хочу знать, могу ли я использовать первое задание на все места или нет.

+1

Этот вопрос уа s много раз обсуждались на SO.Узнайте, как использовать поиск – Andremoniy

+2

Дубликат: http://stackoverflow.com/questions/8710619/java-operator – Apurv

ответ

9

Из Java Language Specification section 15.26.2:

Выражения присваивания соединения формы E1 op= E2 эквивалентно E1 = (T) ((E1) op (E2)), где T является типом E1, за исключением того, E1 вычисляется только один раз.

Таким образом, самое важное отличие (с точки зрения того, почему вторая версия не скомпилируется) - это неявное отбрасывание типа исходной переменной.

+0

+1 Я схватил JLS-ссылку от вас, если вы не против ;) –

9
int a = 10; 
a += 1.5; 

эквивалентно:


В целом:

x += y; эквивалентно x = (type of x) (x + y);


См 15.26.2. Compound Assignment Operators

+0

Это будет перекрывать или округлять десятичную ... – araknoid

1

В случае

a += 1.5; 

неявного авто бокса делается

где, как здесь

a = a+1.5; 

вы явно добавляя ИНТ переменным с плавающей точкой/двойной переменной

поэтому исправить ошибку

a = a+(int)1.5; 

или

a = (int) (a+1.5); 
2

Проверить ссылку

int a = 10; 
a += 1.5; 

будет рассматриваться как

int a=10; 
a=(int)(a+1.5); 

Как вы можете найти в этой ссылке expressions

Смежные вопросы