锁定老帖子 主题:也谈Java值传递-到底传递了什么?
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间: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语言指针抱起来看看吧! 简单的理解就是,简单类型传值,真正的值,对象是传引用的副本。 但如果向这位大哥说的,引用本身也是一个值,所以都是值传递,那这就有点咬文嚼字了,那我就没话说了。 |
|
返回顶楼 | |
发表时间:2010-05-06
值传引用传是对于语言级别的不同,按传的内容理解是错的。应该按不同的传递方式所产生的效果理解。
引用传递是c++里面的东西,在调用中可以声明传递引用,那么在子方法调用中改变该引用的指向,外部方法的引用同样改变。 java语言中无法声明引用传递,在子方法中改变了该引用的指向,外部方法的引用不变。 java的值传递引用传递说法是被很多人误导了。对于在子方法中通过调用对象的set方法从而改变了值,这不是引用传递,这种类似于引用传递的叫法是什么呢?见:http://en.wikipedia.org/wiki/Evaluation_strategy |
|
返回顶楼 | |
发表时间:2010-05-06
yongyuan.jiang 写道 值传引用传是对于语言级别的不同,按传的内容理解是错的。应该按不同的传递方式所产生的效果理解。
引用传递是c++里面的东西,在调用中可以声明传递引用,那么在子方法调用中改变该引用的指向,外部方法的引用同样改变。 java语言中无法声明引用传递,在子方法中改变了该引用的指向,外部方法的引用不变。 java的值传递引用传递说法是被很多人误导了。对于在子方法中通过调用对象的set方法从而改变了值,这不是引用传递,这种类似于引用传递的叫法是什么呢?见:http://en.wikipedia.org/wiki/Evaluation_strategy Call by sharing |
|
返回顶楼 | |