Я думал я 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, увеличение значения и снова упаковка в объект, т.е. создается уже совсем другой объект.
Комментариев нет:
Отправить комментарий