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;
}
}
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;
}
}
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;//这里变后。也跟着变
}
就这 param4[0] = 1;//这里变后。也跟着变没说清楚。。这里又回到java到底是传地址还是传值,这个问题在网上很多,建议楼主去看看。