关于一个java参数传递的问题

class pen1 {
static int redValue=1,greenValue=2,blueValue=3;
static void getRGBColor(int red,int green,int blue){
red=redValue;
green=greenValue;
blue=blueValue;
}
}
public class Color1 {
public static void main(String args[]){
int r=-1,g=-1,b=-1;
pen1.getRGBColor(r,g,b);
System.out.println("red="+r+", green="+g+", blue="+b);
}
}
----------------------------------------------------------------
class RGBColor {
public int red,green,blue;
}
class pen2 {
static int redValue=1,greenValue=2,blueValue=3;
static void getRGBColor(RGBColor aColor){
aColor.red=redValue;
aColor.green=greenValue;
aColor.blue=blueValue;
}
}
public class Color2 {
static RGBColor pen2Color=new RGBColor();
public static void main(String args[]){
pen2.getRGBColor(pen2Color);
System.out.println("red="+pen2Color.red+", green="+pen2Color.green+", blue="+pen2Color.blue);
}
}
----------------------------------------------------------------
这两个程序不都是参数传递么,为什么结果却不相同呢,请高手指教~~~

上边那个是值传递,就是简单的数值作为参数传递,这种传递,是不会改变参数的返回值的。如上面的int参数,虽然有red=redValue;但其实改变了的red的值并没有返回。
上边那个是引用传递,就是对象作为参数传递,这种传递,若方法体内改变了该引用的值,则该参数的返回值也会发生变化。如上面的RGBColor aColor参数,因为是引用传递所以在改变aColor.red=redValue;值的时候,其调用参数pen2.getRGBColor(pen2Color); 中的pen2Color值也发生了改变。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-02-05
ls说的有道理,这个是调用过程中的Stack问题,随着函数的退出,ebp改变了,所以局部变量也没用了..但是对象其实是存在heap里的,改变对象的值其实就是改变了对象指向的指针所对应的值,java全部帮你屏蔽掉了,其实实质是很深奥的!!
相似回答