一.数组的定义
数组本质上就是让我们能 “批量” 创建相同类型的变量。数组在内存中是一组连续的内存。
创建数组的基本语法(举例):
- int[ ] arr = {1, 2, 3};//定义并初始化
- int[ ] arr = new int[ ] {1, 2, 3};//定义并初始化
- int[ ] arr = new int[3];//仅定义,直接打印结果为3个0
arr[0]=1;
arr[1]=2;
arr[2]=3;
//初始化较麻烦,数组元素连续可使用for循环,不推荐使用
4.int[ ] arr = null;
//定义数组,null不指向任何元素
//静态初始化,定义的同时要进行初始化
arr = new int[ ]{1,2,3}
//数组初始化
二.数组的打印(遍历数组元素)
1.for循环,可以拿到数组下标
int[] arr = {1, 2, 3};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
2.for-each循环(增强for循环,快捷键iter)
冒号左边写数组存放的类型,冒号右边写数组的名字,不能拿到数组下标
int[] arr = {1, 2, 3};
for (int x : arr) {
System.out.println(x);
}
3.使用Arrays工具类,需导入java.util包
int[] arr = {1, 2, 3};
String str = Arrays.toString(arr);
System.out.println(str);
//System.out.println(Arrays.toString(arr));
//打印结果:[1,2,3]
//将当前数组arr转换为字符串
三.JVM内存
JVM内存划分为五块:JVM栈(Java虚拟机栈)、本地方法栈、堆、方法区、程序计数器
1.方法内定义的变量为局部变量,存放在JVM栈上。
2.堆上存放引用(也就是地址)
例如:
int a = 10; int[] array = {1,2,3}
a是整型变量,存放整型数据,a=10在栈上
array是引用变量,存放的是引用,array在栈上,{1,2,3}在堆上,array存放的是堆上的{1,2,3}的引用(地址)
数组是对象,对象在堆上
四.数组的拷贝
1.利用for循环
举例:
int[ ] array = {1,2,3,4,5};
int[ ] copy = new int[array.length];
for(int i = 0; i < array.length; i ++){
copy[ i ] = array[ i ];
}
2.利用Arrays
格式:Arrays.copyOf(original , newlength)
original:要拷贝的数组
newlength:要拷贝的数组长度
举例:
Int[ ] array = {1,2,3,4,5};
int copy = Arrays.copyOf(array , array.length);
System.out.println(Arrays.copyOf(array , array.length) );
3.arraycopy(native方法,底层由c或c++所写)
格式:arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
src:要拷贝的数组:源数组
srcPos:源数组的位置
dest:目的地数组
destPos:目的地数组位置
length:拷贝数组长度
举例:
int[ ] array = {1,2,3,4,5};
int[ ] copy = new int[ array.length ];
System.arraycopy(array,0,copy,0,array.length);
4.克隆 clone
举例:
int[ ] array = {1,2,3,4,5};
int[ ] copy = array.clone( );
System.out.println(Arrays.toString(copy));
5.copyOfRange(from, to)
from to :左闭右开
举例:
int[ ] array = {1,2,3,4,5};
int copy = Arrays.copyOfRange(array,2,4)
System.out.println(Arrays.toString(copy));
//打印结果:[3, 4]
6.深、浅拷贝
深拷贝:通过copy[0] = 999,不会影响源数组array的值。
浅拷贝:copy[0] = 999,则将源数组array[0] 的值也修改为了999,以上四种拷贝方式都是浅拷贝。
简单类型:深拷贝,引用类型:浅拷贝(一般情况下)