今天群里有个小朋友问为啥
为什么输出的两次数组a的值不一样?
原因 :java中的值传递和引用传递
public static void main(String[] args) {
int[] a ={1,2,3};
System.out.println("main方法中的a地址:"+a);
a(a);
System.out.println("");
System.out.println("main方法中的a地址(执行a方法后):"+a);
for(int one:a)System.out.print(one+",");
System.out.println("");
System.out.println("----------------");
System.out.println("main方法中的a地址:"+a);
b(a);
System.out.println("");
System.out.println("main方法中的a地址(执行b方法后):"+a);
for(int one:a)System.out.print(one+",");
System.out.println("");
new ArrayList<>();
}
public static void a(int[] a){
a= new int[]{4, 5, 6};
System.out.println("a方法中的a地址:"+a);
for(int one:a)System.out.print(one+",");
}
public static void b(int[] a){
a[0]=4;
a[1]=5;
a[2]=6;
System.out.println("b方法中的a地址:"+a);
for(int one:a)System.out.print(one+",");
}
main方法中的a地址:[I@2eee9593
a方法中的a地址:[I@7907ec20
4,5,6,
main方法中的a地址(执行a方法后):[I@2eee9593
1,2,3,
----------------
main方法中的a地址:[I@2eee9593
b方法中的a地址:[I@2eee9593
4,5,6,
main方法中的a地址(执行b方法后):[I@2eee9593
4,5,6,
java中的可以认为其实都是引用传递,
但是方法a只是给a变量重新赴了一个地址,
而main方法中的a变量的地址并没有改变,
b方法是给地址中的值做了修改,
所以这就是它为啥没变的原因。