Используя примитивы Java, пытается ли JVM сохранить память?

#java #primitive

#java #примитив

Вопрос:

 var foo = (short) 40   (byte) 10
  

Сколько байтов занимает foo?
Каков его тип?

Я ожидал бы, что результат сохраняется в кратком, но для экономии памяти проверяет ли JVM, поместится ли он в меньший примитив?

Если бы это было (short) 1 (byte) 1 , было бы это все равно коротким?

Комментарии:

1. 4. Результатом добавления short к байту является значение int, потому что операнды подвергаются двоичному числовому продвижению.

2. На самом деле это, вероятно, зависит от того, где foo определено: переменная класса? Локальная переменная? В любом случае, это почти наверняка int .

3. Это целое число. Когда вы добавляете меньшие целые типы, вы получаете int. Итак, 4 байта.

Ответ №1:

Эмпирическое правило: целочисленные арифметические операции выполняются как long и приводят к long , если любой из аргументов имеет значение long , int в противном случае.

Я также подозреваю, что JVM использует 4 байта даже для хранения переменных byte and short boolean ) — см. JVMS 2.6.1. Локальные переменные и таблицу 2.11.1-B.


Даже var test = (byte)1 (byte)1 приведет test к int .

Это не относится к var test = (byte)(1 1)