//方法定义 public static void addOne(int num){ num = num + 1; System.out.println(num);//11 } //调用 Integer num = 10; addOne(num); System.out.println(num);//10
自己试了,确实无法修改值。JVM运行时将基本数据类型的值拷贝一份,传入方法参与计算,计算结束后释放拷贝值。
class Person{ public Integer age; public String name; public Person(Integer age,String name){ this.name = name; this.age = age; } } // 方法定义 public static void addOne(Person person){ person.age = person.age+ 1; System.out.println(person.age);//11 } //调用 Person person = new Person(20,"jack"); addOne(person); System.out.println(person.age);//11
想要了解原因,需要深入Java运行时的堆栈上分别存入的什么数据
堆
JVM仅有一个堆,被所有线程共享;堆中存放着所有类的实例化对象 和 数组对象
栈
存放所有对象的名称,这些名称指向堆中对应的对象以及基本数据类型
所以,类实例作为参数进入方法,修改的是堆中的数据,这是长久的,主程序中定义的基本数据类型,存放在栈中,使用时JVM并不会去刻意修改它。
未完待续…