入门基础 Java参数传递方式

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

其实这个问题我原来翻译(破除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接口进行调用的,也应该属于本地调用,和上面说的情况应该是一致的。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航