java值传递
严格上来说,java的参数传递都是值传递。
基本数据类型
public static void main(String[] args) {
int x = 1;
int y = 2;
swap(x, y);
}
public static void swap(int a, int b){
int temp = a;
a = b;
b = temp;
}
a和b仅在swap方法中做了交换,实际调用中x和y并未做交换。
如果要a和b做交换,可以用如下方法。
public static void main(String[] args) {
int[] arr = {1, 2};
swap(arr);
}
public static void swap(int[] arr){
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
引用类型
public static void main(String[] args) {
Integer x = 1;
Integer y = 2;
swap(x, y);
}
public static void swap(Integer a, Integer b){
Integer temp = a;
a = b;
b = temp;
}
在上述代码中,Integer类型的x和y也未做交换。
因为在swap方法中a和b只是x和y的两个引用副本,虽然都指向了两个Integer的实例化对象,但只是两个引用地址。
所以,交换a和b的值会交换a和b对于实例化对象1和2的指向,并不会改变x和y的地址的值。