数组概述和定义格式说明
- 为什么要有数组(容器)
- 为了存储同种数据类型的多个值
数组概念
- 数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
- 数组既可以存储基本数据类型,也可以存储引用数据类型。
数组定义格式
数据类型[] 数组名 = new 数据类型[数组的长度];
数组的初始化动态初始化
- 什么是数组的初始化
- 就是为数组开辟连续的内存空间,并为每个数组元素赋予值
- 如何对数组进行初始化
- a:动态初始化 只指定长度,由系统给出初始化值
- int[] arr = new int[5];
- b:静态初始化 给出初始化值,由系统决定长度
- a:动态初始化 只指定长度,由系统给出初始化值
- 动态初始化的格式:
- 数据类型[] 数组名 = new 数据类型[数组长度];
静态初始化的格式:
- 格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
- 简化格式:
- 数据类型[] 数组名 = {元素1,元素2,…};
初始化值
- 整数类型:byte,short,int,long默认初始化值都是0
- 浮点类型:float,double默认初始化值都是0.0
- 布尔类型:boolean默认初始化值false
- 字符类型:char默认初始化值’\u0000’
- char在内存中占的两个字节,是16个二进制位
- \u0000,每一个0其实代表的是16进制的0,那么四个0就是代表16个二进制位
地址表示
- [I@19bb25a
- [代表是数组,几个就代表几维
- I代表是int类型
- @是固定的
- 19bb25a代表的是数组的地址值
- [I@19bb25a
数组操作的两个常见小问题越界和空指针
- ArrayIndexOutOfBoundsException:数组索引越界异常
- 原因:你访问了不存在的索引。
- NullPointerException:空指针异常
- 原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。
- int[] arr = {1,2,3};
- arr = null;
- System.out.println(arr[0]);
- ArrayIndexOutOfBoundsException:数组索引越界异常
数据传递问题
- 基本数据类型的值传递
- 不改变原值,因为调用后就会弹栈,局部变量随之消失
- 引用数据类型的值传递
- 改变原值,因为即使方法弹栈,但是堆内存数组对象还在,可以通过地址继续访问
- Java中到底是传值还是传址
- 既是传值,也是传地址,基本数据类型传递的值,引用数据类型传递的地址
- java中只有传值,因为地址值也是值