数组
数组(Array):可以一次定义得到多个类型相同、功能相似的变量。
一、数组类型
Java类型:基本类型(byte、short、int、long、float、double、char、boolean 共8个)、引用类型(数组、类、接口、枚举)
基本类型添加一组方括号就变为数组类型。( int —> int[] ,元素类型 —> 数组类型)
二、定义数组
-
静态初始化:只指定元素,不指定长度。
new 类型[]{元素1,元素2,元素3······} -
动态初始化:只指定长度,不指定元素。系统会为每个元素分配初始值,其分配规则为:
-所有数组元素为数值类型时,数组元素初始值为0。
-所有数组元素为boolean时,数组元素初始值为false。
-所有数组元素为引用时,数组元素初始值为null。
new 类型[长度]
三、使用数组
- 数组都有一个length属性,返回数组长度。数组一旦创建,其长度是固定的(其在内存中的位置也是固定的)。
- 每个数组元素就相当于一个变量。数组元素类型就是数组类型去掉一组方括号。
- 遍历数组——依次使用每个元素
- 使用foreach循环遍历数组。
for(元素类型 变量名:数组名)
{
循环体
}
- 数组有几个元素,该循环就执行几次,变量回自动、依次等于每个元素。
- foreach遍历只能访问数组元素的值,不能修改数组元素的值。
四、数组的内存机制
- Java程序的内存可分为:
-堆(heap)内存:Java虚拟机启动时分配的一块永久的、很大的内存空间。堆内存中的对象,如果没有引用变量指向它,那它就变成了垃圾,等待VM的垃圾回收器来回收它。
-栈(stack)内存:每次方法运行时分配的一块临时的、很小的内存区。每个方法都有自己对应的栈区,方法结束时对应的栈区就会被回收。 - 在方法中定一定的、局部变量(不管什么类型)都放入对应的方法栈。
- new出来的东西都在堆内存。
五、基本类型和引用类型
计算机的每个内存单元(byte、字节)在操作系统都有一个编号,就像一栋楼要为每个房间按编号一样。
- 变量赋值的区别:
基本类型的赋值:直接将改制存入变量所在内存。
引用类型的赋值:将该对象所在第一个内存单元的编号(内存地址)存入变量。
int a = 20;
int b = a;//基本类型赋值:直接将值存入变量所在内存
System.out.println("a:"+a); //a:20
System.out.println("b:"+b); //b:20
b = 13;//将13存入b所在内存
System.out.println("a:"+a); //a:20
System.out.println("b:"+b); //b:13
int[] arr = new int[]{20}; //引用类型的赋值:将该对象所在第一个内存单元的编号(首地址)存入变量。
int[] brr = arr; // 引用类型的赋值:只存首地址
System.out.println("arr[0]:"+arr[0]); //arr[0]:20
System.out.println("brr[0]:"+brr[0]); //brr[0]:20
brr[0] = 13;
System.out.println("arr[0]:"+arr[0]); //arr[0]:13
System.out.println("brr[0]:"+brr[0]); //brr[0]:13