数组的两种赋值的方式
引用传递,赋的是地址
- 数组的值是放在JVM的堆里,当定义一个数组时会在JVM里的栈中,放置堆的地址,来指向JVM对应的 堆 。
- 在对数组进行赋值的时候,默认情况下是引用传递,即把堆的地址给新的数组,让新数组指向该堆,其实使用的内存空间地址都是同于一个。
- 在对其中任何一个数组做修改的时候,另一个数组的值也会改变。
- 可以类比基本数据类型的赋值方式。
一维数组内存 存在形式
二维数组内存存在形式

值传递
数组的传递就需要按数组下标进行赋值,并创建一个新的数组空间
//数组 arr1
int[] arr1 = {1,2,3};
//数组arr2
int[] arr2 = new int[arr1.length];
//遍历 arr1 ,把每个元素拷贝到 arr2 对应的元素位置
for (int i = 0 ; i < arr1.length ; i ++){arr2[i] = arr1[i];
}
这样对数组 arr2 进行修改就不会影响 arr1 的值了。
数组的添加/扩容
看一下这个代码,可以对数组有跟进一步的了解。
- 原始数组使用静态分配 int[] arr = {1,2,3}
- 增加的元素 4,直接放在数组的最后 arr = {1,2,3,4}
- 用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n
public static void main(String[] args) {int[] arr = {1, 2, 3};do {//每次都创建一个新的数组空间,长度是之前数组长+1int[] arrNew = new int[arr.length + 1] ;System.out.println("请输入要添加的整数");Scanner scanner = new Scanner(System.in);int add = scanner.nextInt();arrNew[arrNew.length -1] = add ;//把原数组赋值给新数组for (int i = 0 ; i < arr.length ; i ++){arrNew[i] = arr[i] ;}//把新数组的地址给原数组,这里是引用传递arr = arrNew ;System.out.println("新数组的元素是");for (int i = 0 ; i < arr.length ; i ++){System.out.print( arr[i]);}System.out.println('\n');System.out.println("是否继续添加 'y/n' ");String next = scanner.next();if (next.charAt(0) == 'n')break;} while (2>1) ;}
感谢观看

















