数组
数组可以看成时一个容器,是一组数据类型相同的数据的组合,数组本身是一个引用数据类型,数组内存储的类型可以是基本类型,也可以是引用类型。
- 数组的特点
- 数组本身是一个引用数据类型
- 数组是在堆内存中的一串连续的地址存在
- 数组在初始化时必须指定长度
- 堆内存中的数组空间长度一旦确定,不能再次发生改变
- 栈内存的变量中存储的是数组的地址引用
- 数组内部存储的类型可以是基本,也可以是引用
1.数组的定义(声明)
//数据类型[] 数组名字;
int[] arr;
2.数组的初始化
- 静态初始化
int[] array = new int[]{10,20,30,40};
int[] array = {10,20,30,40};
- 动态初始化
有长度,没有元素(默认值)
整数默认值 – 0
浮点数默认值 – 0.0
字符型默认值 – 0 对应的char 97-a,65-“A” 48-0
布尔型默认值 – false
引用数据默认值-- null
int[] array = new int[5]
3.数组元素的访问
通过元素在数组中的位置来访问(从0开始)
存值/取值
位置---->index索引,索引[从0 开始----数组长度-1]
如果数组的索引超出了上述范围,会出现运行时异常:ArrayIndexOutOfBoundsException
4.数组元素的遍历
通过循环的方式访问数组的每一个元素
JDK1.5版本之后 增强for循环
for(自己定义的变量(接收数组内的每一个元素):数组名){
代码;
}
int[] array = {10,20,30};
for(int i= 0; i<array.length;i++) {
System.out.println(array[i]);
}
System.out.println("---------------------------------");
for(int value: array){
System.out.println(value);
}
输出结果
10
20
30
---------------------------------
10
20
30
*5.基本类型和引用类型在内存结构上的区别
int[] array = new int[]{10,20,30}
见到new关键字,相当于在堆内存中申请开辟一块新的空间
所有的变量空间都存储在栈内存中
变量空间可以存储基本数据类型,也可以存储引用数据类型
如果存储的是基本数据类型,存储的是值,一个变量改变,另一个不会跟着改变
如果变量空间存储的是引用数据类型,存储的是引用(地址),一个变量地址对应的值改变,另一个跟着改变
public class Demo{
public void main(string[] args){
int[] a = {1,2,3,4}
int[] b = a
b[0] = 10
System.out.println(a[0])
System.out.println(b[0])
}
}
//输出
10
10
在栈内存中开辟了一个int数组类型的变量空间叫a,然后new关键字是申请在堆内存中开辟一个连续的,数据类型为int的变量空间,并且将数组首地址赋值给a,因此可以通过a访问数组的所有元素;
int [] b = a;是在栈内存中开辟了int数组类型的变量空间b,并且将a中的元素赋值给它,因此b中存放的也是数组的首地址(图中的红色三角形),改变了b[0]的值,就是改变了堆内存中数组首地址的值,因此a[0]的值也跟着改变。