您的位置 首页 java

「Java三分钟」Java方法参数传递方式是什么?

关注我,每天三分钟,轻松掌握一个Java知识点。

Java里方法的参数传递方式只有一种:值传递。

所谓值传递,就是讲实际参数的影分身传入到方法内,而参数本身不会发生任何变化。

可以理解为你在画图工具上画了一个图,再复制一份,你对复制品的任何涂改不会影响之前原版的画。

类比到代码中如下:

上述代码执行结果:

我们可以看到,在调用了swap方法候,main方法中的a、b值并未受到影响,这是为什么呢?

因为在main方法传递a、b给swap的时候,传递的是a、b的复制品,复制品在swap中怎么折腾,main方法中的本体完全不受影响,甚至还有点想笑。

有的同学可就说了,不对,我平时传对象进方法,然后给对象各种操作再出来,对象里面的属性值全变了,这怎么解释?

解释这个问题之前,我想先说两个基本概念:基本类型和引用类型。

基本类型:

江湖人称“四类八种”:

1)四种整数类型(byte、 short 、int、 long )

2)两种 浮点数 类型( float double )

3)一种字符类型( char )

4)一种布尔类型( boolean )

引用类型:对象在一个叫堆的地方,我把它在堆里的地址写一个牌牌,这个牌牌能带我找到住在堆里的对象,这就是引用类型。

接下来我们聊聊他们都住在虚拟机的哪:

如图,基本类型和值,都存在一个叫栈的地方,而新建的对象,存在一个叫堆的地方,如果你使用它,就得有一个引用类型(牌牌)带你去,而上面同学问的问题答案就在这里面。

实际上你在方法中传递引用的时候,引用也跟上面的ab和熊喵一样,被复制了两份,也就是说另一个栈中也有一份panda和banana。

你在方法中拿到了panda这个牌牌,你就可以找到堆里的同一个对象,你霍霍这个对象,本地指向的也是这个对象,所以出现了你感觉上是把对象传给了方法让它霍霍了一样,实际上传递的还是栈中的副本。

执行结果为:

这里可以看出,对象中的属性ab的值被置换了,就是原版tSwap和传入方法总的复制品tSwap都是指向了堆中的Swap对象。

小伙伴们理解了吗?

以上就是今天分享的全部内容了,创作不易,希望大家多多关注,收藏,评论支持,谢谢大家!

文章来源:智云一二三科技

文章标题:「Java三分钟」Java方法参数传递方式是什么?

文章地址:https://www.zhihuclub.com/179495.shtml

关于作者: 智云科技

热门文章

网站地图