学习编程——Java基础-值传递

值传递

基本类型和引用类型数据存储

在Java中声明一个基本类型,基本类型的值与基本类型的句柄信息一同存放在栈中。而声明一个引用类型时,引用类型的值放在堆中,而句柄信息和值在堆中的地址放在栈中。如图:
在这里插入图片描述

值传递

上简单的测试代码帮助我们理解:

public static void exchange(int a,int b)
	{
		int c=a;
		a=b;
		b=c;
	}

这里定义了一个交换函数,形参为整形的a,b。
我们定义int a=10;int b=20;执行exchange(a,b);
这时我们再查看a和b的值发现a,b的值并没有互换,而是保持原来的样子,这是为什么呢?结合存储,我们来分析下:
在这里插入图片描述
a’,b’为函数的形参,形参复制对应,a,b的值,而新声明的c复制a’的值为10;
之后执行函数里面的赋值操作,最后函数结束,内存回收,则a’、b’和c都被回收,而原有的a和b的值并没有改变。

我们再来看引用类型例子:

public static void exchange(Person a,Person b)
	{
		Person c=a;
		a=b;
		b=c;
	}

同理,这时候形参复制的就不是对应数据的值了,而是对应在堆中的地址,同样在函数结束后回收,而原数据依旧没有改变。
在这里插入图片描述
这里的箭头,意思是句柄信息指向堆中的地址。我们发现a和b的地址指向并没有改变。

通过上面两个例子我们可以了解到,Java中函数参数的传递,不论是基本类型还是引用类型都是值传递,而不是引用传递,引用传递才能真正改变原数据中的值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值