Страницы

Поиск по вопросам

понедельник, 8 октября 2018 г.

Integer которые передается в static метод, передается как ссылочный Object?

Я думал я Java знаю хорошо. Имеем int - примитивный тип. Когда передаем его в метод, то в методе не ссылка на переменную, а лишь копия. Я полагал что Integer, полноценный класс упаковки int передается в метод по ссылке и любые манипуляции с переменной Integer переданные в метод будут происходить непосредственно с той переменной которую мы передали, а не какой то копией.
Я не понимаю, почему следующий код работает против моего понимания типов в Java.
Integer a=5; inc(a); System.out.println(a);
private static void inc(Integer a){ a++; }
Output:
5
Объясните, почему 5, а не 6???


Ответ

Вы все правильно сказали, все аргументы при вызове метода в java передаются по значению, но тут один нюанс. java.lang.Integer является неизменяемым типом, и когда происходит инкрементирование, то выполняется unboxing, увеличение значения и снова упаковка в объект, т.е. создается уже совсем другой объект.

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

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