数组
概念
数组是一块连续的存储空间,用于存储多个相同类型的数据。
特点
1.相同类型 2.长度固定
定义
数据类型[] 数组名 = new 数据类型[数组长度];
如:int[] a = new int[5]; //定义数组a用于存储5个连续的int数据
访问数组元素
使用下标:从 0 到 a.length - 1
例:长度为5的数组,下标范围是从0到4
语法:数组变量名[数组下标]
//给第二个元素赋值
a[1] = 9;
//获取第二个元素的值,并打印输出
System.out.println(a[1]);
【注:ArrayIndexOutOfBoundsException:数组下标越界】
数组的遍历
把数组元素依次遍历一遍
int[] a = new int[5];
for(int i = 0; i < a.length; i ++){
System.out.println(a[i]);
}
数组元素默认值
数组定义后,没给数组元素赋值,缺省就有的值为数组元素的默认值。
默认值取决于数组元素类型
byte/short/int/long 默认值为0
float/double 0.0f/0.0
char ‘\u0000’(空字符)
boolean false
String以及其他引用类型 null
定义数组的其他语法
【注意:new用于分配/开辟内存空间】
1.先声明,后分配空间
数据类型[] 数组名;
数组名 = new 数据类型[长度];
2.声明的同时,分配空间
数据类型[] 数组名 = new 数据类型[长度];
3.声明并赋值
数据类型[] 数组名 = new 数据类型[]{1,2,3,4};
4.声明并赋值
数据类型[] 数组名 = {1,2,3,4}; //不可以换行
【注意】
int[] a;
a = {1,2,3};
是错误的!!!!必须注意!!!
数组的首地址
int[] a = {55, 23, 4, 11, 3};
System.out.println(a);
public static void printArray(int[] c){
c[0] = 0;
System.out.println(Arrays.toString(c));
}
输出:[I@f5f2bb7
[0, 23, 4, 11, 3]
[I@15db9742 是数组首地址。
c中存储的也是首地址,当c[0] = 0时,c作为“遥控器”将会对堆内的数组值进行改变。
当new数组时,就会在堆中为该数组申请一块连续的存储空间,此处为5 * 4B的内存空间。然后将该存储空间的首地址赋值给栈中变量a,所以数组变量a中存储的是数组的首地址。
a[0] 首地址不进行地址偏移
a[1] 首地址往后偏移1个int类型存储单位4字节
堆内存(heap):保存每一个对象的属性内容,保存对象的真正数据。堆内存需要用关键字new才可以开辟,如果一个对象没有对应的堆内存指向,将无法使用。
栈内存(stack):保存的是一块堆内存的地址数值,可以把它想象成一个int型变量(每一个int型变量只能存放一个数值),所以每一块栈内存只能保存一块堆内存地址。
注意:只有new才能开辟内存空间!!!!每new一次都表示要开辟新的堆内存空间!!!!!
数组作为函数的参数
数组作为函数参数时,实参给形参赋的值是地址。
实参和形参指向同一块地址。
数组的扩容
扩容方式:
1>定义新的大数组
2>文件的复制
System.arraycopy(原数组,原数组起始,新数组,新数组起始,长度);
3>JDK提供
Arrays.copyOf(原数组,新长度); //返回带有原值的新数组
为什么要扩容? 数组长度有限
扩容思想:
- 创建新数组
- 将旧数组元素复制到新数组中
- 更新数组地址
可变长参数
概念:适用于个数不确定,类型确定的情况。
注意:只能有一个参数,因为多个参数会分不清
- 可变参数在形参中可以接收多个数据。
- 可变参数的格式:数据类型…参数名称
可变参数的作用
- 传输参数非常灵活,方便。可以不传输参数,可以传输1个或多个参数,也可以传输一个数组。
- 可变参数在方法内部本质上就是一个数组。
可变参数的注意事项:
- 一个形参列表中可变参数只能有一个
- 可变参数必须放在形参列表的最后面
public class test1 {
//可变长参数 实参可以是0-N个该类型的数据
public static void main(String[] args) {
print(1,2,3,4,5);
}
public static void print(int ...arr){
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
--------------------------------------------------------------------
1
2
3
4
5