java中值传递和引用传递

Java中,有7种基本类型,当他们作为参数传递的时候,属于值传递,也就是说传递完成后,在方法中的参数与原函数中的变量是没有任何关系的.

而String和其他类型的对象,如果进行传参,则属于引用传递,引用传递的时候,实质上是将该对象的引用传递进去,方法中的对象和原函数中的对象其实是不同的,只是引用相同而已

现有代码如下:

public class Money {
	private int x;
	Money(int a){
		this.x=a;
	}
	public void normalAdd(int x){
		x++;
	}
	public void moneyAdd(Money money){
		money.x++;
	}
	
	public void moneyNew(Money money){
		money=new Money(100);
	}
	public static void main(String args[]) {
		Money money=new Money(10);
		int a=10;
		money.normalAdd(a);
		System.out.println(a);
		money.moneyAdd(money);
		System.out.println(money.x);
		money.moneyNew(money);
		System.out.println(money.x);
	}
}
输出结果为

10

11

11

第一种情况,值传递

结果等于10,因为方法中对x进行操作并不会影响到main方法中的a

第二种情况:引用传递

将money对象传递到方法中,复制了引用给方法中的变量money,虽然方法和主函数中的对象都叫money,但实际上他们是不同的两个对象,只是引用相同而已.由于方法中的money对其属性进行了+的操作,所以会对主函数中的money对象产生影响(同一引用)

第三种情况:引用传递

第三种情况和第二种情况相似,但是返回值是11而不是100,为什么呢?最关键的一点在于二者只是引用相同而已,并没有其他联系.所以在方法中money=new Money(100),这样将方法中的money对象指向了一个新的money对象,当方法执行完毕时,这个对象的作用域也就到此为止了,gc会将其内存空间回收,销毁对象.所以在主函数中的对象指向的还是money.x=11的这一个对象.

所以,综上所述:

Java中,基本类型的传递属于值传递

引用类型的传递属于引用传递,但传递的是对象的引用,在方法中的对象和在方法外的对象是除了引用以外不同的两个对象.故能否产生影响要看其是否对同一引用进行了操作.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值