引言¶
根据think in Java(java编程思想)的说明,Java只存在值传递。
Java里面的引用,可以理解为指针(实例的地址)。引用型的变量,实际就是指针或者叫实例的地址。
引用型的对象作为参数传给函数时,实际就是把地址拷贝传递过去。
基本型¶

- ①:在Stack里把func1的data的值「5」拷贝到func2的cout。
- ②:即使修改了func2的cout,func1的data的值,也不会发生变化。
- ③:这是data的值还是「5」。
引用型¶
创建一个引用型实例的时候,内存的变化如下:
1 2 3 4 5 6 7 8 9 10 | class Person { private String name = "unknown"; private int age = -1; Person(String name, int age) { this.name = name; this.age = age; } } Person p1 = new Person("Tom",18); |
- ①函数的Stack里,生成一个p1(可理解为指针)、在heap里分配Person的空间
- ②设定类的初期值

设定初期值:

- ③通过构造函数设值

- ④把实例的地址保存到Stack的p1

按照上面的顺序,调用函数时如果将[p1]作为参数传入的话,实际上是把p1保存的[0x3000]的值传入,
被调用函数里如果修改传入的实例的内容,函数调用完以后,函数外的p1实例也会被修改。
因为它在堆内存里的实例是同一个,拷来拷去的都是它的的地址(像身份证号码一样)。
下例:「p1.name」的值变为:「"変更"」。
