Java基础之数组

一、数组概述
1.定义:数组是存储同一种数据类型多个元素的集合,可以看成是一个容器。
2.数组既可以存储基本数据类型,也可以存储引用数据类型。
注意:


1) 基本数据类型包括byte、short、int、long、float、double、boolean、char;
  引用数据类型包括数组、类、接口、枚举。
  其中基本数据类型分类:
    整数类型:byte、short、int、long,默认初始值均为0
        - byte:字节型,占1个字节,即8位。取值范围为-2^7~2^7-1,即-128~127
        - short:短整型,占2个字节,即16位。取值范围为-2^15~2^15-1,即-32768~32767
        - int:整型,占4个字节,即32位。取值范围位-2^31~2^31-1,即-2147483648~2147483647
        - long:长整型,占8个字节,即64位。取值范围为-2^63~2^63-1,即−9223372036854775808~9223372036854775807
    浮点类型:float、double,默认初始值为0.0
        - float:单精度,占4个字节,默认值为0.0F.举例为Float f = 23.13f;
        - double:双精度,占8个字节,默认值为0.0D. 举例为Double d = 12.345;
    布尔类型:boolean 布尔型,值为true 或 false,默认值为false
    字符类型:char 字符型,最小值为'\u0000',最小值为'\uffff',默认值为'\u0000'
2) 基本数据类型优先级比较
    (byte、short、long) < int < long < float < double
    优先级较低的可自动转换为优先级较高的,优先级较高的转换成优先级低的需进行强制类型转换。另外byte、short、char三者之间不存在隐式转换,只能进行强制类型转换。
3)基本数据类型与引用数据类型的值传递:
    - 基本数据类型的值传递不改变原值,因为方法调用完毕会弹栈,局部变量会随之消失
    - 引用数据类型的值传递改变原值,因为即使方法弹栈,但是new出来的数组对象还会存在堆内存,可以通过地址继续访问
4)Java中到底是传值还是传址?
    - 说法1 既传值也传址,基本数据类型传递的是值,引用数据类型传递的是地址。
    - 说法2 Java中只有传值,因为地址值也是值√

3.数组定义格式
1)一维数组

动态初始化:只指定初始长度,由系统给出初始值,初始值为0,格式为:

数据类型[] 数组名 = new 数据类型[数组长度];
如:int[] arr1 = new int[5];
1
2
静态初始化:直接给出初始化值,系统判断长度,格式有二:



数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, 元素3, ……};
数据类型[] 数组名 = {元素, 元素2, 元素3, ……}; ——>简写形式
如:int[] arr3 = new int[]{11, 22, 33, 44, 55}; //静态初始化

int[] arr2 = {11, 22, 33, 44, 55};                //静态初始化简写形式

1
2
3
4
其他格式(不常用)



数据类型 数组名[] = new 数据类型[数组长度];
数据类型 数组名[] = new 数据类型[]{元素1, 元素2, 元素3, ……};
数据类型 数组名[] = {元素, 元素2, 元素3, ……};
如:int arr4[] = new int[5];


int arr5[] = {11, 22, 33, 44, 55};
int arr6[] = new int[]{11, 22, 33, 44, 55};

1
2
3
4
5
6
注意:数组的初始化不允许动静结合,即int[] arr = new int[5]{11, 22, 33, 44, 55};这种写法绝对错误





直接打印数组为其地址值
如:[I@19bb25a中[代表的数组、有几个就代表几维数组;I代表是int类型;@是固定符号;19bb25a代表十六进制的地址值。

2)二维数组

动态初始化:

数据类型[][] 数组名 = new 数据类型m;
如:int[][] arr = new int3;这是一个二维数组,其中包括3个一维数组,每个一维数组中有2个元素。
1
2
其他格式:



数据类型 数组名[][] = new 数据类型m;
数据类型[] 数组名[] = new 数据类型m;
1
2
注意:int[] x,y[]; 这是定义了一个一维数组x和一个二维数组y



4.数组操作可能会出现的问题
越界:ArrayIndexOutOfBoundsException数组索引越界异常
原因:访问了数组中不存在的索引

空指针:NullPointerException空指针异常
原因:数组已经不再指向堆内存,而你还在用数组名去访问元素。即当数组引用赋值为null,再去调用数组中的元素就会出现空指针异常。

二、内存图

如有问题 请多多指教

三、使用Arrays工具类操作数组

原文链接:segmentfault.com

上一篇:JavaScript之对象类型转换
下一篇:必须有数字和字母组合的正则表达式

相关推荐

官方社区

扫码加入 JavaScript 社区