数组
int[] a = new int[6];
int 表示数组里面存放数据的数据类型
[] 表示数组
a 表示数组名
new 新开辟一个堆内存空间
new int[] 新开辟的类型控件为int 类型的数组
6 表示数组长度
= 将新开辟的空间赋予数组a
数组定义格式:
动态初始化
元素类型[] 数组名 = new 元素类型[10];
元素类型 数组名[] = new 元素类型[10];
静态初始化
元素类型[] 数组名 = {元素1,元素2...};
元素类型[] 数组名 = new 元素类型[]{元素1,元素2...};
区别:动态一开始只知道元素类型和元素个数,不清楚具体的值,在使用的时候赋值
静态在类加载的时候,就已经创建好空间并赋值了。
数组在内存中的理解:
* 数组新创建的时候放在栈里,在堆空间开辟对应数量的空间,预留给栈里的数组
* 数组的实际值在对空间里,并且会赋予默认值
* 栈存放的是堆内存指向的地址,以及基本数据类型的值
* int[] j = null;
* 指向的是一个空,引用时发生的是空指针异常,一般就是对象没有被声明
* 引用时也就是引用了一个未被声明的地址
关于 = 的一个特点:
在堆内存中为数组asd开辟了一片空间,并将地址传给栈中的asd
然后栈中的zxc在执行代码后,获得的是数组asd在堆中的地址,对两个数组其中一个修改,两个数组在引用时的结果相同
所以输出的结果就是45
int[] asd = {1,2,3,4};
int[] zxc = asd;
zxc[2] = 45;
System.out.println(asd[2]);