public class ParamTester { public int memberVarible = 0;
public static void main(String args[]){
int param1 = 0;
ParamTester param2 = new ParamTester();
ParamTester param3 = new ParamTester();
int[] param4 = {0};
changeParameter(param1,param2,param3,param4);
System.out.println("param1="+param1);
System.out.println("param2.memberVarible="+param2.memberVarible);
System.out.println("param3.memberVarible="+param3.memberVarible);
System.out.println("param4[0]="+param4[0]);

}
public static void changeParameter(int param1,ParamTester param2,ParamTester param3,int[] param4){
param1 = 1;
param2.memberVarible = 1;
param3 = new ParamTester();
param3.memberVarible = 1;
param4[0] = 1;
}
}

解决方案 »

  1.   


    public int memberVarible = 0;// 这是类变量(成员变量),要在类实例化时才创建 public static void main(String args[]) {
    int param1 = 0;// 申明一个int类型的局部变量p1=0
    ParamTester param2 = new ParamTester();// 实例化一个ParamTester变量param2,它有一个成员变量:meberVarible=0
    ParamTester param3 = new ParamTester();// 实例化一个ParamTester变量param3,它也有一个成员变量
    // :meberVarible=0,与上边的变量在不同的堆内存中,
    //不能看作是同一个(例如:你在D:\下有个txt.txt的文件,里边类容为:aaa,
    //在E:\下也有个txt.txt的文件,里边内容为:defe,但这两个文件不能混为一谈)

    int[] param4 = { 0 };//一个数组p4
    changeParameter(param1, param2, param3, param4);//跳到changeparameter方法
    System.out.println("param1=" + param1);//0
    System.out.println("param2.memberVarible=" + param2.memberVarible);//1
    System.out.println("param3.memberVarible=" + param3.memberVarible);//0
    System.out.println("param4[0]=" + param4[0]);//1 } public static void changeParameter(int param1, ParamTester param2,
    ParamTester param3, int[] param4) {
    param1 = 1;//这个只是把p1的值0传过来了。这里改变后原来的值仍为0
    param2.memberVarible = 1;//这里是把p2里边的属性改变,但原p2的地址指向仍不变,因此原p2.mv的值变为了1
    param3 = new ParamTester();//这里重新实例化,地址指向改变,原p2的地址仍不变,因此原p3.mv为0
    param3.memberVarible = 1;//p3.mv=0;
    param4[0] = 1;//这里变后。也跟着变
    }
      

  2.   

    1楼的大部分都说清楚了
    就这 param4[0] = 1;//这里变后。也跟着变没说清楚。。这里又回到java到底是传地址还是传值,这个问题在网上很多,建议楼主去看看。
      

  3.   

    我看到的是:方法的参数调用中遵循基础类型传值,引用类型对象的引用public static void changeParameter(int param1,ParamTester param2,ParamTester param3,int[] param4){最后的那个传的是数组应该也是个引用,所以param4[0] = 1;真实的值也会跟着变而int param1传的是具体的值,应该是在stack中再建立一个param1的局部变量,赋值为1,changeParameter方法结束后消失,所以打印的依然是原来的局部变量param1=0;我是这样理解的其实1F解释的很清楚了