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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 练习题 中级黑马   /  2014-8-6 11:02  /  1134 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我看了一些文章,还是有点摸不着头脑说Java没有引用传递,说是什么用值传递拷贝了引用的副本,什么是副本.谁能帮我画个图解释一下吗?

点评

http://bbs.itheima.com/forum.php?mod=viewthread&tid=135537&page=3#pid906060  发表于 2014-8-6 12:10

8 个回复

正序浏览
fantacyleo 发表于 2014-8-6 18:25
我也觉得引用传递的概念是多余的,不过其他语言想多定义一个概念,这无妨。但从功能上来说,Java里还真是 ...

嗯,其实我也明白了一些道理,真正两个对象做交换也是一样的,swap里头对象的交换,根本影响不到main函数的实参的两个对象.突然也明白了,其实所谓引用传递就是传递地址,跟传递值是一样.就叫值传递吧.谢谢你阿!!
回复 使用道具 举报
练习题 发表于 2014-8-6 18:18
这些我都理解,谢谢.我只是不太懂各个语言的说法,其他语言传地址值叫做引用传递,而java里头就想你说的类, ...

我也觉得引用传递的概念是多余的,不过其他语言想多定义一个概念,这无妨。但从功能上来说,Java里还真是没有其他语言里定义的那种”引用传递“。比如一个数组int[] a,C#里用ref就可以在所调用的方法里让a指向其他数组,Java里就做不到,你只能改a中的元素,但无法让a改变指向;只能让被调用方法返回一个新数组,然后用a接收,即a = foo(a);这种形式
回复 使用道具 举报
liubea 发表于 2014-8-6 13:44
不管是原生类型还是对象的引用都是值传递,只不过引用传递的是地址值。

嗯嗯 谢谢,
回复 使用道具 举报
怀念黑海岸 发表于 2014-8-6 12:18
不需要画图,很容易理解的。
      你记好这句话:java中不管是值传递还是引用传递,其实都是传递的 ...

这些我都理解,谢谢.我只是不太懂各个语言的说法,其他语言传地址值叫做引用传递,而java里头就想你说的类,是引用类型也是传地址值,但是说java里头只有值传递没有引用传递.可能就是一种说法吧
回复 使用道具 举报
不管是原生类型还是对象的引用都是值传递,只不过引用传递的是地址值。
回复 使用道具 举报
有点数据总线,控制总线和地址总线的感觉
回复 使用道具 举报
      不需要画图,很容易理解的。
      你记好这句话:java中不管是值传递还是引用传递,其实都是传递的是具体的值。
      如何理解:当你传的是基本数据类型的话那么肯定是具体的值了,当你传递的是引用数据类型的话,像对象,那么你传递进去的并不是对象实体,而是这个对象的地址,地址也是具体的值,所以才有传递其实就是传递具体的值的说法。
       但是两者还是有区别的,你传递基本数据类型时,你传进去的其实是这个基本数据类型的一个拷贝,你在传值进去的方法中对这个数据的操作其实是在操作这个拷贝,而真正的实体,他是不会随你的操作而发生改变的,也就是当你这个方法结束后,变化的是拷贝,数据本身不发生变化。String不是基本数据类型,但是他却和基本数据类型一样传递的是拷贝。这是一个特例,记住了。
      而你传递对象进去时,因为传递的是对象地址,那么方法内涉及到对对象的操作时,所以操作最终都是指向这个对象的,那么你在方法中对对象做出的任何修改,都会导致对象实体发生改变,一个对象实体是可以对应多个对象引用变量的哦。任何引用变量做出的动作都会导致对象实体跟着做出响应。
     
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马