Java使用值传递的方式将实参传递给方法。传递基本数据类型变量的值与传递数组的值不同。
- 对于基本类型数据参数如int byte double,传递的是实参的值。
- 对于数组类型参数,参数值是数组的引用,给方法传递的是这个引用。
即,如果改变方法中的数组,将会看到方法外的数组也变化了。
声明和方法所需的空间在栈中,数组存储在堆中。堆用于动态内存分配。
public static void main(String[] args) {
int[] a = {1, 2};
swap(a[0], a[1]);
System.out.println("swap:" + a[0] + " " + a[1]);
swapInArray(a);
System.out.println("swapInArray:" + a[0] + " " + a[1]);
}
//参数为数组
private static void swapInArray(int[] a) {
int temp = a[0];
a[0] = a[1];
a[1] = temp;
}
//参数为基本数据类型值
private static void swap(int i, int i1) {
int temp = i;
i = i1;
i1 = temp;
}
输出为:
swap:1 2
swapInArray:2 1
swap()调用时,值传给了方法的形参
形参的内存位置独立于a[0] a[1]的内存位置
所以不会影响在堆的数组的内容。
swapInArray方法的参数数组是通过引用传给方法。方法外和方法内的a都指向同一内存位置(堆)中的同一个数组。