присваивания в Java

84
Находится в разделах:

Есть у нас два маленьких  кусочка кода:

Код 1:

Код 2:

Если сейчас для Вас не является секретом, какой из этих двух примеров удачно скомпилируется, а какой - нет, то можете спокойно пропускать эту заметку. Если же - нет, то жмем "Читать далее".

Итак, рабочий код содержится в Код 1.  Но, лучше давайте начнем разбираться с Код 2. Где же тут ошибка? А вот она:

Дело в том, что "Целочисленные выражения всегда содержат результат вычисления в переменной размером с int и  никогда меньше."

Значит, мы пытаемся в переменную типа short запихнуть значение типа int, а это грозит потерей точности, о чем нас и уведомляет компилятор:

Но почему же в Код 1 у нас нет никаких предупреждений о ошибках?

Дело в том, что: "Составные присваивания (+=), выполняют автоматическое приведение типов." что это значит?

Это значит, что запись:

На самом деле равна вот такой записи:

Все.

 

P.S. Цитаты взяти из мега статьи max`а, за которую ему отдельное спасибо.


Конец
Константин Дмитриевич Ушинский в свое время заметил, что воля наша, как и наши мускулы, крепнет от постоянно усиливающейся деятельности; не давая им упражнения, вы непременно будете иметь слабые мускулы и слабую волю.

max аватар

Зато так сработает:

short s = 12;

s = (short) (s + 10);

Cool

s = (short) s + 10;// не прокатит? как в C

Отправить комментарий

CAPTCHA
Чтобы оставить комментарий, введите пожалуйста код, изображенный на картинке
Image CAPTCHA
Введите символы, изображенные на картинке