论坛首页 入门技术论坛

也谈Java值传递-到底传递了什么?

浏览 6368 次
该帖已经被评为新手帖
作者 正文
   发表时间:2010-04-23   最后修改:2010-04-23
jameswxx 写道
没有想到这个问题还会引起这么多资深人士的口水。

其实很简单,如果大家先不想java的值传递和引用传递,c的传递大家应该都清楚吧,说穿了,所谓的引用传递不就是类似于c的指针吗?指针本身就是一个值,所以总的说来,java就是值传递。

Object a=new Object();
先创建了一个指向Object类型的引用对象 a.
再创建一个Object对象
然后将刚刚创建的Object对象的地址给a
这正如数据库的索引和表一样,一个索引项存储了指向某一行的实际地址。

Object b=a;
先创建了一个指向Object类型的引用对象 b.
然后将a的值(指向某一个对象的应用)复制传递一份给b
相当于又建立了一个索引项,该索引项存储的行地址和刚才那个索引项一样

b.set****()方法会引起a的属性的改变,因为两个都指向同一个地址。

b=new Object();
给b赋值了一个新的引用,现在b和a已经没有关系,对b的修改不会影响到a。



还不清楚的,建议好好把大学时候的c语言指针抱起来看看吧!




简单的理解就是,简单类型传值,真正的值,对象是传引用的副本。

但如果向这位大哥说的,引用本身也是一个值,所以都是值传递,那这就有点咬文嚼字了,那我就没话说了。
0 请登录后投票
   发表时间:2010-05-06  
值传引用传是对于语言级别的不同,按传的内容理解是错的。应该按不同的传递方式所产生的效果理解。

引用传递是c++里面的东西,在调用中可以声明传递引用,那么在子方法调用中改变该引用的指向,外部方法的引用同样改变。

java语言中无法声明引用传递,在子方法中改变了该引用的指向,外部方法的引用不变。

java的值传递引用传递说法是被很多人误导了。对于在子方法中通过调用对象的set方法从而改变了值,这不是引用传递,这种类似于引用传递的叫法是什么呢?见:http://en.wikipedia.org/wiki/Evaluation_strategy
0 请登录后投票
   发表时间:2010-05-06  
yongyuan.jiang 写道
值传引用传是对于语言级别的不同,按传的内容理解是错的。应该按不同的传递方式所产生的效果理解。

引用传递是c++里面的东西,在调用中可以声明传递引用,那么在子方法调用中改变该引用的指向,外部方法的引用同样改变。

java语言中无法声明引用传递,在子方法中改变了该引用的指向,外部方法的引用不变。

java的值传递引用传递说法是被很多人误导了。对于在子方法中通过调用对象的set方法从而改变了值,这不是引用传递,这种类似于引用传递的叫法是什么呢?见:http://en.wikipedia.org/wiki/Evaluation_strategy

Call by sharing
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics