Java值传递和引用传递

在使用方法时,参数的传递是如何实现的呢?我们先看一个例子。

public class Test {

	public static void main(String[] args) {

		int i = 10;
		add(i);
		System.out.println("main-->i = "+i);
	}
	public static void add(int i) {
		i++;
		System.out.println("add-->i = "+i);
	}
}

运行结果:
add-->i = 11
main-->i = 10

可能有些同学认为,main-->i应该是11,但为什么是10呢?我们从内存图上一探究竟。

方法在占内存中压栈。首先是main函数,创建变量 i 。然后是add方法,其内部会创建变量 i 。这两个变量是不同的。add方法中的变量i的值是什么呢?其实调用add方法时,传递的i的值,是main方法中变量名为 i 的内存中存放的值,即10。

我们再看一个例子。

public class Test01 {

	public static void main(String[] args) {
		
		User u = new User(20);
		add(u);
		System.out.println("main--> = "+u.age);
	}

	public static void add(User u) {
		u.age++;
		System.out.println("add-->age = "+u.age);
	}
}
class User{
	
	int age;
	
	public User(int age){
		this.age = age;
	}
	
}

运行结果:
add-->age = 21
main--> = 21

如果你能理解上面标记了黄色的句子,那么这个例子的答案就很容易得到。

同样还是拿内存图讲解。

main方法创建User对象u,User对象在对内存中存放,变量存放User对象的地址。

add方法参数u中的值由main方法中变量名为u的那一块内存空间里存放的值传递而来。这个值在这里是地址。

add方法和main方法中的u都指向同一个User对象。那么,先调用add函数age值会被修改为21,再回到main方法中打印age值当然还是21了。

                                                                                     End...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值