栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于Java中参数传递问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于Java中参数传递问题

一,问题由来

说起来可笑,本人大四,自以为java基础扎实,想找份实习工作,故去牛客上刷了一些题,差点没把我人抬走了,一开始就遇到这样的题目,如下:

有没有人和我一样的答案:
test okandgbc

二,问题分析

这是典型的传值问题,这里我也做了很多测试,先看如下两个测试:
图一


图二

我们都知道,String对象一旦确定就无法更改,其实对于我这种小白来说,这句话挺抽象的,当创建一个String对象时,其实你是创建了一个地址和一个值,这里我们的值是“drh”,首先地址是不可变的,而这里的不可变,其实说的就是我们的值不可变,什么意思呢,就是只要我这个对象的地址不变,我这个值就不可能变化。
值传递
一般情况下,基本数据类型是值传递,而引用数据类型是引用传递,而String不一样。我们这里图一所见,我们把String对象放入有参数的方法中,这里,有参数的方法,其执行的值传递,什么意思,即只是把我们的实参的值传到该方法中,而地址并没有传递,方法会给我创建一个临时代理对象,其值是我们传入的,地址不是,所以当他发生改变时,只是临时对象发生了变化,故我们自己创建的name对象并没有发生变化。
而图二为什么发生了变化,其实这就很好理解,图二可以看作如下:

我只是在我自己的类中修改我自己对象,并不是通过传参的形式。
这里可能就有人会问,不是说String是不可变的吗?其实这里的String对象地址已不是原来的地址,这里的name + " rhj" 创建了新的的对象,然后赋值给了name,这里的name地址和值都发生了改变,早已不是原来的对象!
除了String,Integer等包装类也是如此。
引用传递

StringBuffer/StringBuilder这两者妥妥的引用对象,故是引用传递,所以在方法中传参的时候,连带自己的地址传过去,因为其值是可以更改的,所以这里的值发生了改变!

三,数组传递

数组传递也是引用传递,但值得注意的是,在方法中不可以使用=将一个数组赋值给另一个数组,因为这样原始数组就“变了”,地址发生了变化,不可取,引用传递不允许改变地址值。

四,正解

那么说到这,一开始的题目答案自然见分晓,goodandgbc。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/273469.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号