public class ParamTester{
  public int memberVariable=0;  public static void main(String args[]){    int param1=0; 
    ParamTester param2=new ParamTester();
    ParamTester param3=new ParamTester();
    int param4[0]={0};

    changeParameter(param1, param2, param3, param4);     System.out.println("param1=" +param1);
    System.out.println("param2.memberVariable="+param2.memberVariable);                   
    System.out.println("param3.memberVariable=" + param3.memberVariable);
    System.out.println("param4[0]="+param4[0]);
  }  public static void changeParameter(int param1, ParamTester param2, ParamTester param3, int [] param4){
    param1=1; 
    param2.memberVariable=1; 
    param3=new ParamTester();
    param3.memberVariable=1;
    param4[0]=1; 
  }
}最后打印出:
0
1
0
1我不明白的是为什么param1,param2,param4 同样作为参数传给changeParameter,
最后param1的值是0,而param2.memberVariable跟param4[0]的值是1。

解决方案 »

  1.   

    - -!!这帖子又出现了,刚作了回答,一提交就提示帖子不存在。现在又出现了,怪事。
    param2在作参数传递的时候是按引用传递的,就是说在changeParameter里边的那个param2像一个指针一样,指向外边那个param2的地址,改变的其实是外边的param2的值。
    而param4是按值传递的,方法changeParameter里边的那个param4可以说是外边那个param4的克隆,它们不是同一个变量,分别在内存里占两个位置,但值是一样的。改变其中一个变量的值不影响另一个变量。
      

  2.   

    看错了.
    之前那个帖子好像param4是个整数..晕
    怎么改了
      

  3.   

    那就不回答了 shit 发错了
      

  4.   

    那按你这么说param4[0]应该还是0才对,还有那param1是怎么传递的呢?
      

  5.   

    还有这里错了吧
    int param4[0]={0};应该是
    int param4[]={0};
      

  6.   

    param4[0] 数组是对像 所以 是传引用 在方法内部修改了 会影响相应的值
      

  7.   

    1)首先:int param4[]={0};2)编程错误,changeParameter()优先处理参数变量,所以param1=1并未真正对变量param1赋值;而对象和数组则不同;至于param3,局部定义了一个同名对象,param3.memberVariable=1只是给局部的对象赋值。
      

  8.   

    param3就跟chszs(老刀)说的那样,作用域的问题。