Java基础之一维数组声明与底层的拷贝方法

1. 数组是相同数据的集合

1.0 首先数组是在堆上申请的一段连续的空间

1
int [] arr = new int[10];

在这里插入图片描述

arr 保存在堆上开辟的内存的首地址

1.1数组的三种定义方式
数组的通用声明方式 类型名 [] 数组名
(1) 先声明后初始化

1
2
3
int [] arr ;
arr = new int [5]; //这种声明方式直接给定了数组的大小,
//且数组各个元素默认值为0

(2)声明的同时进行初始化

1
2
int []arr = {1,2,3,4};
int []arr = new int[]{1,2,3,4}; //系统可以直接计算出来元素的个数

(3)先声明后初始化使用系统分配的默认值

1
int [] arr = new int [5];     //包含5个元素,且各个元素默认初始化为0

不能同时定义数组的各个元素和大小

1.2 数组的遍历

1.下标遍历

1
2
3
4
int []arr =new int [5];
for(int i = 0 ;i<arr.length ;i++ ){
System.out.println(arr[i]);
}

2.for each遍历

1
2
3
for(int value : brr){					// 将每个数据赋值给value    迭代器自定义
System.out.println(value);
}

3.Arrays类中的方法: to String()方法

1
System.out.println(Arrays.toString(arr)); //调用了TO String方法
1.3 一维数组的拷贝

1.调用 数组名.clone()方法

1
2
3
4
5
int []arr ={1,2,3};
int []brr;
brr =arr.clone();
System.out.println("arr:"+ Arrays.toString(arr));
System.out.println("brr:"+ Arrays.toString(brr));

在这里插入图片描述

  1. Arrays.copyof(原数组,拷贝数组长度) ;
1
2
3
4
int []arr ={1,2,3};
int [] brr = Arrays.copyOf(arr,arr.length);
System.out.println("arr:"+ Arrays.toString(arr));
System.out.println("brr:"+ Arrays.toString(brr)); //拷贝结果同上

这种拷贝方式可以通过给原数组进行间接增长
arr = Arrays.copyOf(arr,arr.length);
在这里插入图片描述
Arrays.copyOf();
底层实现原理
在这里插入图片描述
Arrays.copyOf();实现的原型是

1
public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)

src 为原数组
srcPos为原数组的要复制的起始位置 在Arrays.copyOf();中默认为0
dest 为目的数组
destPos 为目的数组放置的起始位置 在Arrays.copyOf();中默认为0

在一维数组中所有的拷贝均为深拷贝,不存在浅拷贝

在此处 src 与dest 必须是相同的类型或者是可进行转换的数据类型