摘要
- 数组
概述和定义格式
- A:存储同种数据类型的多个值
- B:数组概念
- 存储同一种数据类型多个元素的集合,可以看成容器。
- 既可以存储基本数据类型,也可以存储引用数据类型。
- C定义格式(动态初始化)
- a:数据类型[] 数组名 =new 数据列席[数组长度]
初始化值
- 整数类型:0
- 浮点类型:0.0
- 布尔类型:false
- 字符类型:char默认'\u0000',char占两个字节,16个二进制位,每个0表示一个16进制的0,四个即表示16个二进制位
注意
- 直接输出数组会打印数组的地址。如地址[I@19bb45c,其中[的个数即数组维数,I表示int类型,@后面的代表十六进制的地址值。
Java的内存分配以及堆和栈的区别
- 栈
- 储存局部变量(定义在方法声明上和方法中的变量)
- 堆
- 存储new出来的数组或对象
- 方法区
- 代码储存区
- 本地方法区
- 和系统相关
- 寄存器
- 给CPU使用
例子
int[] arr = new int[3];
动态初始化,创建三块连续空间。在栈中储存变量arr,堆中储存new出来的3个对象。
多个数组的内存分配
-
每次新建数组就会在内存的堆和栈中分配空间给新的对象和变量。当利用一个数组定义另一个数组时:
int[] arr1=new int[3]; int[] arr2=arr1;
arr2和arr1指向的地址相同,改变其中一个数据,另一个会随之改变。
1.png
静态初始化
1. 数据类型[] 数组名 =new 数据类型[] {元素1,元素2,...}
2. 数据类型[] 数组名 ={元素1,元素2,...}
第一种可以先声明后赋值,第二种必须同时声明和赋值。
越界和空指针
- 访问数组中不存在的索引会出现索引越界异常
- 若数组变量被重新赋值为null,再调用数组中的元素会出现空指针
传值还是传址
- Java中只有传值,地址值也是值。