基本数据类型传递
public static void main(String[] args) {
int a = 10;
System.out.println(a);//10
a = 20;
System.out.println(a);//20
change(a);
System.out.println(a);// ? 20
}
private static void change(int a) {
System.out.println(a);//20
a = 50;
System.out.println(a);//50
}
那么?处的值应该是多少,分析一下:
所以此时a还是20
引用数据类型传递
public static void main(String[] args) {
int[] array = new int[]{10,99};
System.out.println(Arrays.toString(array));//[10,99]
change(array);
System.out.println(Arrays.toString(array));//[99,10]
}
private static void change(int[] array) {
int temp = 0;
for (int i = 0; i < array.length; i++) {
if(i == 0){
temp = array[0];
}else if(i == array.length -1){
array[0] = array[i];
array[i] = temp;
}
}
}
main方法中的array变量引用的是堆内存中的“01111”内存空间,该内存空间中有[10,99]的数组,
将array数组传递给change方法时,是将“01111”地址复制一份,传递给了change方法中的array变量,所以在change方法中操作change方法中的array变量,实际上还是操作的“01111”地址的数组;
所以最终的结果是[99,10]