南戴河传奇温泉小鱼:请教一个关于java参数传递的问题

来源:百度文库 编辑:高考问答 时间:2024/05/12 05:06:12
----------------------------------------------------------------
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);
}
}
----------------------------------------------------------------
为什么上面两个程序得到不一样的结果?都是参数传递啊 ???

我也不是很懂,大概是这样的:
java的参数传递方式是值传递,当参数是简单类型时,不改变参数的值;当参数是引用类型时,不改变这个对象的引用.
这就是为什么第一个程序没得到引用的值.而如果采用调用对象的方法,就可以修改该对象中可访问的变量了.第二个例子
加入了RGBColor这个对象,目的就在于通过它能够调用到pen的getRGBColor方法,并传回需要的值.

结果当然是不同了,
第一个输出就是r、g、b的值,-1,-1,-1

第二个你先建了一个RGBColor的实例pen2Color,然后将其作为参数传递给pen2类,用pen2中的静态方法对实例pen2Color的属性red,green,blue进行赋值,结果就是1,2,3