java中关于方法参数的介绍

友情提示,参考这篇文章Java参数传递原理和JVM详解一起看会更加容易理解。
要了解Java中参数传递的原理,首先你要先知道按值传递和按引用传递的区别。
按值传递表示方法接受的是调用者提供的值,按引用传递表示方法接受的是调用者提供的变量地址。一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值。而Java程序设计语言总是采用按值调用,也就是说,方法得到的是所有参数值的一个拷贝。下面我将举一些实例来具体说明:

#基本数据类型

public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a=10,b=20;
		swap(a,b);
		System.out.println(a+"-------"+b);
	}
	public static void swap(int a,int b) {
		int temp=a;
		a=b;
		b=temp;
	}

其结果为

原理相当于:
执行swap之前:
在这里插入图片描述
执行swap之后:
在这里插入图片描述
从图中可以看出:执行swap前后,实参ab并没有改变。改变的只是形参ab,而形参ab在执行完swap之后就被撤销了(局部变量在方法执行结束后被撤销)。所以最后a=10,b=20;

#类类型

类类型直接传递
public class scdn {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		employee tom=new employee();
		tom.setId(10);
		employee jarry=new employee();
		jarry.setId(20);
		System.out.println(tom.getId()+"-------"+jarry.getId());
	}
	public static void swap(employee a,employee b) {
		employee temp=a;
		a=b;
		b=temp;
	}
	

}
class employee{
	private int id;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
	
}

结果为

其原理和上面差不多。

类类型通过方法传递
public class scdn {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		employee tom=new employee();
		tom.setId(10);
		employee jarry=new employee();
		jarry.setId(20);
		swap(tom, jarry);
		System.out.println(tom.getId()+"-------"+jarry.getId());
	}
	public static void swap(employee a,employee b) {
		int temp;
		temp=a.getId();
		a.setId(b.getId());
		b.setId(temp);
	}
	

}
class employee{
	private int id;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
	
}

结果为:

执行swap之前:

执行swap之后:

为什么类类型通过这两个不同swap方法之后结果会不同呢?这是因为第二个swap中实参tom和形参a一直指向的是同一个地址(x),jarry和b一直指向(y),所以最后修改形参可以改变实参的值。

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值