关于Java中的参数传递问题

面试的时候总有面试官爱问java中参数传递的问题(什么传递个对象了,会不会修改调用者传入的那个变量的值了啥的),我特么就不明白了,问这种问题有鸡毛用。你难道工作中写个方法还要想一下参数怎么传呢?

好吧,吐槽归吐槽,为了面试还是要弄明白一点。

要弄清会不会改变传入的参数本身的值,首先要弄清楚一个概念:副本。

副本是什么?

我也不清楚 上图 



比如说你新建了一个txt文件叫做(新建文本文档.txt)当你ctrl+C,ctrl+V后产生了一个文件(新建文本文档 - 副本.txt)

新产生的文件就是源文件的一个副本。

我们改变副本中的内容,并不会对原文件产生什么影响,java中的参数传递和这个也有类似的地方

1.基本类型

比如什么 int float double之类的 

你传进去的参数只是它的一个副本,当你在被调用的函数中修改它的值的时候,你只是相当于修改了上图中copy出来的那个文档的内容,在调用函数中,他的值该是什么还是什么(相当于新建文本文档.txt)

2.对象类型

对象类型和上图有点不同但也有类似的地方

我们知道一个对象的变量名只是该对象的一个引用,这个在栈区的引用指向放在堆区的对象。

当我们把这个变量当作参数传递进一个方法的时候,其实是相当于把引用的副本传入方法。只不过这个引用副本和原来的引用都指向同一个对象。

那么有两种情况

 2.1 我在方法中通过getset方法修改某一个属性的值会影响原来的对象中该属性的值吗?

当然是会的,他们指向的堆中的区域是一致的

 2.2 我在方法中新建一个对象然后赋值给传入的参数会影响被传入的参数的值吗?

不会 当你新建一个对象的时候,你便在堆中又开辟了另外一块区域,赋值给传入的参数时,你只不过是把传入的引用副本所指向的对象做了修改,原来的参数扔指向先前的对象,所以不会改变


3.特殊的一个String类型

我也不知道为啥,这货与基本类型一样不会改变。






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值