2015-03-03 2 views
7
int anInt = 1; 
double aDouble = 2.5; 

anInt = anInt + aDouble; // Error - need to cast double to int 

anInt += aDouble; // This is ok. Why? 

anInt = aDouble; // This is also an error. 

anInt = 1 + aDouble; // This is also an error. 

Так что мои вопросы: Почему это не ошибка компиляции anInt += aDouble?Java Puzzler - литье с двойным на int

+1

Не могли бы вы объяснить, что вам нужно? – Gunaseelan

+0

@Gunaseelan разве это не в коде в комментариях? – RNJ

+1

@Gunaseelan, я думаю, он спрашивает, почему 'int = int + double' делает ошибку, а' int + = double' doesn't – SomeJavaGuy

ответ

8

Три из четырех случаев должным образом сообщают об ошибке. Единственное исключение из правила - составное назначение. Спецификация языка Java, часть 15.26.2, объясняет, почему:

15.26.2 Соединения Операторы присваивания

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

Например, следующий код является правильным:

short x = 3; 
x += 4.6; 

и приводит й, имеющее значение 7, потому что это эквивалентно:

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

Как вы можете видеть, ошибка избегается неявным введением броска.

+0

Да. Я наткнулся на это в своем коде и был просто удивлен, что сложное задание не нуждается в трансляции. Спасибо за ответ. –

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