Возможный дубликат:
Изменчивое поведение для возможной потери точности
Я обнаружил несогласованность в сильной проверке ввода Java во время компиляции. Посмотрите на следующий код:
int sum = 0;
sum = 1; //is is OK
sum = 0.56786; //compile error because of precision loss, and strong typing
sum = sum + 2; //it is OK
sum += 2; //it is OK
sum = sum + 0.56787; //compile error again because of automatic conversion into double, and possible precision loss
sum += 0.56787; //this line is does the same thing as the previous line, but it does not give us a compile error, and javac does not complain about precision loss etc.
Может ли кто-нибудь объяснить это мне? Это известная ошибка или желаемое поведение? С++ дает предупреждение, С# дает ошибку компиляции.
Разрывает ли Java сильную типизацию? Вы можете заменить + = на - = или * = - все допустимо компилятором.