//实现两个数值的交换
地址传递 通过传递同一个地址操作的是同一数组或者不同数组;
值传递:传递的是简单数据类型 在栈当中进行交换 没有对堆中的数组的值造成影响 所以交换的结果不会发生改变
首先 形参a,b是形参 只能在函数内部起作用 在函数外部不起作用
其次:当在传值过程中 a在栈中和b发生了交换 没有通过地址调用数组中对应的堆中的值 所以值传递不会使得最终数组中的值发生交换
int[] arr = {4,5};
//值传递
change2(arr[0],arr[1]);
System.out.println(arr[0]+" "+arr[1]);
//引用传递
change(arr);
System.out.println(arr[0]+" "+arr[1]);
}
public static void change(int[] arr) {
arr[0] = arr[0] ^ arr[1];
arr[1] = arr[0] ^ arr[1];
arr[0] = arr[0] ^ arr[1];
}
public static void change2(int a, int b) {
a = a^b;
b = a^b;
a = a^b;
}
址传递的特殊情况:如果函数内部的引用重新进行了指向,函数内部不能改变外部的值
public static void main(String[] args){
int[] arr4 = [4,5];
change(arr4);
}
public static void change(int[] arr){
int[] arr1 = {5,6};
arr = arr1;
arr[0] = arr[0] ^ arr[1];
arr[1] = arr[0] ^ arr[1];
arr[0] = arr[0] ^ arr[1];
}