A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 一枝独秀/51 初级黑马   /  2012-6-25 21:40  /  2063 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

5 个回复

正序浏览
是值传递,在Java中有值传递和引用传递,但是方法调用是用的却是值传递,值传递指的是方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值。
在java中由于传递的是值,那么传递过去以后就与现在的值互不相干了。而引用传递是指把对象的地址传递到方法或函数中,这种传递由于传递的是内存地址,所以方法中如果改变对象的属性值的话,那么外边的对象也会随之改变

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
从理解上你按照按引用传递比较容易接受点,毕竟最终源对象的值发生了改变。你可以做一个这样的测试:
private void zhi(List a)
        {
                a.add("555");
                System.out.println(a.get(0));//这里会打印出一行555来
                System.out.println(list.get(0));//此处是你在调用方法时传入的参数list,他在这个地方是不会改变的,假设他的size为0,那么此处应该会报错。
        }

而你在main方法内再次打印list的第0个值时会发现打印出555(将方法内的第二个输出语句删除后)


最终结论他是按值传递
回复 使用道具 举报
可以看作引用传递。就像你说的那样,已经证明了传递的是引用数据类型时,形参的改变直接影响实参。
其实引用传递也是值传递的一种,因为它传递是地址值,也是值,所以java中就统一说只有值传递
回复 使用道具 举报
当然是值传递。因为Java只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的,希望这么解答楼主能满意~~

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 邵阳 于 2012-6-25 22:10 编辑

是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的

百度上都有答案啊,楼主问问题前,先查查百度嘛

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马