【Java】深入理解参数的值传递机制

  • 如果赋值操作针对的是基本数据类型的变量,则将基本数据类型变量传递的是:保存的数据值

  • 如果赋值操作针对的是引用数据类型的变量,则将引用数据类型变量传递的是:保存的地址值

  • 调用方法时,方法的形参(只是形参而已!不要与普通的赋值操作混淆)会在栈中新建一个变量。如果要换引用类型里面的元素值,需要传引用类型的地址参数(引用类型变量里放的就是引用类型的地址值)给形参才能使形参新建的变量值指向同一个堆地址,进去同一个堆里面换。不能只传引用类型数据里面的基本类型数据元素给形参,那样的话只是在栈里面复制了一份元素值然后搞事而已,如果是String类型,虽然传的是地址值,但是由于String的不可变性,也不会改变其原有值,包装类也是

  1. 形参:方法在声明时,在一对()内声明的参数,称为形参
    实参:方法在调用时,实际传递的参数值,即为实参
  2. 即当形参是基本数据类型变量是,传递的是:保存的数据值。
    当形参是引用数据类型变量是,传递的是:保存的地址值。

基本数据类型的情况

public class ValueTransferTest1 {	
	public static void main(String[] args) {
		
		int m = 10;
		int n = 20;
	
		System.out.println("m = " + m + ", n = " + n);
		
		ValueTransferTest1 test = new ValueTransferTest1();
		test.swap(m, n);
		System.out.println("m = " + m + ", n = " + n);
	}
	
	public void swap(int m,int n){
		int temp = m;
		m = n;
		n = temp;
	}
}

内存结构图:
在这里插入图片描述

引用数据类型的情况

public class ValueTransferTest2 {
public static void main(String[] args) {

Data d1 = new Data();
d1.m = 10;
d1.n = 20;

System.out.println("m = " + d1.m + ", n = " + d1.n);

//实现 换序

ValueTransferTest2 test = new ValueTransferTest2();
test.swap(d1);

System.out.println("m = " + d1.m + ", n = " + d1.n);

}

public void swap(Data data){
int temp = data.m;
data.m = data.n;
data.n = temp;
}
}
​
​
class Data{
int m;
int n;
}

内存结构图:
在这里插入图片描述

又如:

public class TransferTest3 {
   public static void main(String args[]) {
       TransferTest3 test = new TransferTest3();
       test.first();
  }
   public void first() {
       int i = 5;
       Value v = new Value();
       v.i = 25;
       second(v, i);
       System.out.println(v.i);
  }
   public void second(Value v, int i) {
       i = 0;
       v.i = 20;
       Value val = new Value();
       v = val;
       System.out.println(v.i + " " + i);
  }
}
class Value {
   int i = 15;
}

内存结构图:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值