Java的值传递--深入解析

很多Java初学者,对于值传递和引用传递分的不是很清,最普遍的错误**Java中的引用类型传参就是引用传递 ,对于Java中只有值传递(拷贝一份)**很是困惑。最近刚好有初学Java的同学问过我这个问题,所以把知识罗列了下,通过简单的Java代码加通俗易懂的话语,可以帮助看到的求学者,如有错误望大佬指正。
很多博客上讲的不是很清楚,看完大家就会知道为什么只有值传递了。
建议:有堆栈的基础知识,这样可以加深自己的理解。

话不多说,先上代码(普通类型参数和引用类型参数各一个),对这两个已经清楚的可以直接跳到最后的核心。

普通类型作为参数

普通类型传递,a的数值不会变化

	public static void main(String[] args) {
		int i = 10;
		pass(i);
		System.out.println("main i is "+i);
	}

	private static void pass(int i) {
		i = 20;
		System.out.println("pass i is "+i);
	}
pass i is 20
main i is 10

引用类型作为参数

引用类型传递,a的数值会变化

	public static void main(String[] arg){
		people a = new people(10);
		pass(a);
		System.out.println("main a.age is "+a.getAge());
	}
	//普通类型,a,b的数值不会进行交换
	private static void pass(people a){
		a.setAge(20);
		System.out.println("pass a.age is "+a.getAge());
	}
pass a.age is 20
main a.age is 20

接下来是本次最重重重要的知识

为什么说java只有值传递

先来看段代码

	public static void main(String[] arg){
		people a = new people(10);
		people b = new people(20);
		swift(a,b);
		System.out.println("a的值:" + a +"b的值:" + b);
	}
	
	private static void swift(people a, people b){
		people c = a; 
		a = b;
		b = c;
	}

a,b没有进行转换

a的值:people [age=10]
b的值:people [age=20]

如果Java对对象采用的是按引用传递,那么这个方法就应该能够实现交换数据的效果。可是,结果显示没有。swift方法的a,b被初始化为两个对象的拷贝,这个方法交换的是这两个的拷贝。方法结束时参数变量a,b就会被丢弃。原来的变量仍然指向之前的空间。

科普:c++有值传递和引用传递。引用参数标有&符号。
swap(int a, int b)为值传递
swap(int& a,int& b)为引用传递

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值