示例:
public class num1 {
public static void main(String[] args){
int[] arr = new int[] {1} ;
arr[0] = 1 ;
Func1(arr) ;
System.out.println(arr[0]);
}
public static void Func1(int[] arr){
arr[0] = 2 ;
arr = new int[] {4};
arr[0] = 3 ;
}
}
结果:2
1)Java里数据分为值类型和引用类型,数组是引用类型,即本质上是传递了数组的地址,所以,当被调用的函数里传入的数组发生变化,主函数里的数组也在变化。
2)当在方法中申明变量为值类型,则变量名和数值都存储在栈中;而在方法中申明变量为引用类型,则变量名在栈中,数值在堆中存储。
而在类中申明变量,无论是值类型还是引用类型,变量名和数组都存储在堆中。
arr(主函数)在堆中 ——>引用数值(堆中)
arr(Func函数)在栈中——>引用数值(堆中)
两个arr是不同的变量,但引用了堆中的同一个东西;然而,语句“ arr = new int[] {4};”会生成一个新的arr(栈中),并重新在堆中分配位置存储数值,故arr在之后的值变化对主函数里的arr无影响。