public class test {
public static void main(String[] args) {
int m = 10;
changevalue(m);
System.out.println("m="+m);//m=10
int[] xx ={1,2,3};
changevalue(xx);
System.out.println("xx[2]="+xx[2]);//xx[2]=5
}
public static void changevalue(int m){
m=20;
}
public static void changevalue(int[] xx){
xx[2]=5;
}
}
为什么m输出是10而不是20?
为什么xx[2]输出是5而不是3?
一个是值传递,一个是指针传递。值传递是把其复制了一份传进来,改变的是复制后的值,原值不变;而指针传递的是地址,取地址取到了原来数据的位置进行赋值
基本类型变量的作用域为当前最近的大括号,出了大括号则失效n,被gc清除
而数组是引用类型,初始化时会new一个对象,再调用又会new一个对象,完全是两个不同的引用变量(只不过new对象过程由虚拟机完成,所以在我们看来,直接赋值就行了,而不用new对象)
public class ChangeValue{
int m = 10;
int[] xx ={1,2,3};
public ChangeValue(){
}
public ChangeValue(int m){
m=20;
System.out.println("m="+m);
}
public ChangeValue(int[] xx){
xx[2]=5;
}
}
public class Test{
public static void main(String[] args) {
ChangeValue cv1 = new ChangeValue(20);
int[] xx = new int[3];
ChangeValue cv2 = new ChangeValue(xx);
System.out.println("xx[2]="+xx[2]);
}
}
你是这个意思吧?
因为在输出前已经分别调用了两个静态方法,已经将你原来定义的值给覆盖了,所以,输出结果会是这样