注册
 找回密码
 注册
江西广告网
查看: 331|回复: 0
打印 上一主题 下一主题

入门基础

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2008-12-30 11:15:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
其实这个问题我原来翻译(破除java神话之二:参数是传址的 )、转帖别人的详细解释(Java 应用程序中的按值传递语义 )和专门解释( 我对《Java 应用程序中的按值传递语义》的理解 )过,不过现在看来,原来翻译或者解释的角度是有问题的,从底层的角度解释并不直观,在交流的时候也容易引起误解,最终不能达成一致意见。下面以最终的效果来解释参数的传递方式: 1、对于原始数据类型,也就是int、 long、char之类的类型,是传值的,如果你在方法中修改了值,方法调用结束后,那个变量的值没用改变。 2、对于对象类型,也就是Object的子类,如果你在方法中修改了它的成员的值,那个修改是生效的,方法调用结束后,它的成员是新的值,但是如果你把它指向一个其它的对象,方法调用结束后,原来对它的引用并没用指向新的对象。 代码如下: public class Tester { public static void main(String[] args) { int primitive = 2; changePrimitive(primitive); //primitive的值依然是2 MyClass myClass = new MyClass(); changeObject(myClass); //myClass仍然指向的是执行changeObject之前的那个对象 //但是myClass.i等于3了 } public static void changePrimitive(int primitive) { primitive = 3; } public static void changeObject(MyClass myClass) { myClass.i = 3; myClass = new MyClass(); } } class MyClass { int i; } 对于远程调用,无论是什么类型,调用结束后,传入的参数和以前没用任何变化(当然前途是直接调用远程方法,如果中间经过其它的Proxy类或者Facade类,不能保证那些类对对象没用修改)。至于是通过Local接口进行调用的,也应该属于本地调用,和上面说的情况应该是一致的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表