按引用传递的

按引用传递的重要特点
传递的是值的引用, 也就是说传递前和传递后都指向同一个引用(也就是同一个内存
空间)。
示例如下:
1public class TempTest {
2private void test1(A a){
3行 a. age = 20;
4行 System. out.println("test1方法中的age="+a. age);
5行 }
6public static void main(String[] args) {
7行 TempTest t = new TempTest();
8行 A a = new A();
9行 a. age = 10;
10行 t.test1(a);
11行 System. out.println("main方法中的age="+a. age);
12行 }
13行 }
14class A{
15public int age = 0;
16 行 }
运行结果如下:
test1方法中的age=20

main 方法中的 age=20




理解按引用传递的过程——内存分配示意图
要想正确理解按引用传递的过程, 就必须学会理解内存分配的过程, 内存分配示意图可
以辅助我们去理解这个过程。
用上面的例子来进行分析:
1):运行开始, 运行第 8 行,创建了一个 A 的实例, 内存分配示意如下:
main 方法中的变量 a
2):运行第 9 行,是修改 A 实例里面的 age 的值,运行后内存分配示意如下:
main 方法中的变量 a
这是一个 A 的实例
此时 age = 0
这是一个 A 的实例
此时 age = 10
3): 运行第 10 行,是把 main 方法中的变量 a 所引用的内存空间地址, 按引用传递给 test1
方法中的 a 变量。 请注意:这两个 a 变量是完全不同的, 不要被名称相同所蒙蔽。
内存分配示意如下:
main 方法中的变量 a
赋值给 (按引用传递)
test1 方法中的变量 a
由于是按引用传递, 也就是传递的是内存空间的地址, 所以传递完成后形成的新的内存
示意图如下:
main 方法中的变量 a
test1 方法中的变量 a
也就是说:是两个变量都指向同一个空间。
4):运行第 3 行,为 test1 方法中的变量 a 指向的 A 实例的 age 进行赋值, 完成后形成的
新的内存示意图如下:
main 方法中的变量 a
test1 方法中的变量 a
此时 A 实例的 age 值的变化是由 test1 方法引起的
5):运行第4行, 根据此时的内存示意图, 输出test1方法中的age=20
6):运行第 11 行, 根据此时的内存示意图, 输出 main 方法中的 age=20


理解按引用传递的过程——内存分配示意图
要想正确理解按引用传递的过程, 就必须学会理解内存分配的过程, 内存分配示意图可
以辅助我们去理解这个过程。
用上面的例子来进行分析:
1):运行开始, 运行第 8 行,创建了一个 A 的实例, 内存分配示意如下:
main 方法中的变量 a
2):运行第 9 行,是修改 A 实例里面的 age 的值,运行后内存分配示意如下:
main 方法中的变量 a
这是一个 A 的实例
此时 age = 0
这是一个 A 的实例
此时 age = 10
3): 运行第 10 行,是把 main 方法中的变量 a 所引用的内存空间地址, 按引用传递给 test1
方法中的 a 变量。 请注意:这两个 a 变量是完全不同的, 不要被名称相同所蒙蔽。
内存分配示意如下:
main 方法中的变量 a
赋值给 (按引用传递)
test1 方法中的变量 a
由于是按引用传递, 也就是传递的是内存空间的地址, 所以传递完成后形成的新的内存
示意图如下:
main 方法中的变量 a
test1 方法中的变量 a
也就是说:是两个变量都指向同一个空间。
4):运行第 3 行,为 test1 方法中的变量 a 指向的 A 实例的 age 进行赋值, 完成后形成的
新的内存示意图如下:
main 方法中的变量 a
test1 方法中的变量 a
此时 A 实例的 age 值的变化是由 test1 方法引起的
5):运行第4行, 根据此时的内存示意图, 输出test1方法中的age=20
6):运行第 11 行, 根据此时的内存示意图, 输出 main 方法中的 age=20


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值