数组的两种赋值的方式
引用传递,赋的是地址
- 数组的值是放在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 {
//每次都创建一个新的数组空间,长度是之前数组长+1
int[] 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) ;
}
感谢观看