Создает ли третий оператор еще один объект, содержащий сумму чисел number1 и number2?
Да, это так.
Не лучше было бы иметь метод, например number1.addValue (number2), чтобы добавить number2 к number1 на месте и не создавать новый объект?
Нет, это не так. Это потребует, чтобы классы-оболочки примитивов Java были изменяемыми. Фактически, они неизменяемы.
Подумайте об этом:
Long five = 5L;
Long ten = 10L
Long sum = five;
sum.addValue(ten); // Hypothetically ....
Вопрос: Какое сейчас значение five
?
Ответ: five
было бы сейчас имеют значение 15
... потому что five
и sum
- это один и тот же объект.
Если бы они спроектировали классы-оболочки Long
и т. д. как изменяемые, тогда использование упаковки и распаковки было бы быть намного сложнее для программиста.
Достаточно плохо, что текущая семантика ==
для классов-оболочек противоречит интуиции. Например:
Long one_million = 1,000,000L;
Long one_million_and_one = one_million + 1L;
Long one_million_again = one_million_and_one - 1L;
System.out.println(one_million.equals(one_million_again));
System.out.println(one_million == one_million_again);
... печатает true
и false
.