public class Exa {
public static void main(String[] args) {
Integer b = new Integer(10);
add(b);
System.out.println(b.intValue());
}
public static void add(Integer b){
int i = b.intValue();
i += 3;
b = new Integer(i);
System.out.println("b = "+b+",i = "+i);
}
}
Я написал приведенный выше код и запустил вывод 10. Почему он не изменился?
Почему вывод 10, дайте, пожалуйста, подробную инструкцию , спасибо!
Вы уверены, что на выходе получится не b = 13, i = 13, а затем 10?




Локальная переменная метода b в вашем основном методе отличается от локальной переменной метода в вашем методе add(). Изменение одного не повлияет на другое.
b = new Integer(i);
Здесь вы имеете в виду переменную в методе add(Integer b), а не переменную в основном методе.
Java is always pass-by-value. Unfortunately, they decided to call the location of an object a "reference". When we pass the value of an object, we are passing the reference to it. This is confusing to beginners.
(Extracted from this answer by erlando)
Значение не меняется, поскольку вы назначаете b только локально внутри метода add. В Java вы не можете изменить значение Integer, вы меняете только ссылку. Чтобы получить предполагаемый побочный эффект, вы можете заключить b в объект.
Вы сделали новый
Integer. Вы действительно ожидали, что старый изменится, когда вы это сделали?