type
status
date
slug
summary
tags
category
icon
password
Property
定义一个数组类型的变量,使用数组类型“
类型[]
”,例如,int[]
。和单个基本类型变量不同,数组变量初始化必须使用new int[5]
表示创建一个可容纳5个int
元素的数组。Java的数组有几个特点:
- 数组所有元素初始化为默认值,整型都是
0
,浮点型是0.0
,布尔型是false
;
- 数组一旦创建后,大小就不可改变。
要访问数组中的某一个元素,需要使用索引,数组索引从
0
开始可以使用赋值语句修改数组中的某一个元素,例如
ns[1] = 79;
可以用
数组变量.length
获取数组大小:数组是引用类型,在使用索引访问数组元素时,如果索引超出范围,运行时将报错:
也可以在定义数组时直接指定初始化的元素,这样就不必写出数组大小,而是由编译器自动推算数组大小
还可以进一步简写为:
数组大小变了吗?看上去好像是变了,其实根本没变。
对于数组
ns
来说,执行ns = new int[] { 68, 79, 91, 85, 62 };
时,它指向一个5个元素的数组:执行
ns = new int[] { 1, 2, 3 };
时,它指向一个新的3个元素的数组:字符串数组
如果数组元素不是基本类型,而是一个引用类型,那么,修改数组元素会有哪些不同?
对于
String[]
类型的数组变量names
,它实际上包含3个元素,但每个元素都指向某个字符串对象:对
names[1]
进行赋值,例如names[1] = "cat";
,效果如下:这里注意到原来
names[1]
指向的字符串"XYZ"
并没有改变,仅仅是将names[1]
的引用从指向"XYZ"
改成了指向"cat"
,其结果是字符串"XYZ"
再也无法通过names[1]
访问到了。多维数组
ns
在内存中的结构如下:arr0
指向的数组就是{ 1, 2, 3, 4 }
访问二维数组的某个元素需要使用
array[row][col]
,例如:二维数组的每个数组元素的长度并不要求相同:
要打印一个二维数组,可以使用两层嵌套的for循环:
或者使用Java标准库的
Arrays.deepToString()
:三维数组就是二维数组的数组。可以这么定义一个三维数组:
它在内存中的结构如下:
遍历数组
数组的每个元素都可以通过索引来访问,使用标准的
for
循环可以完成一个数组的遍历:还可以使用
for each
循环,直接迭代数组的每个元素:打印数组内容
直接打印数组变量,得到的是数组在JVM中的引用地址:
这并没有什么意义,因为希望打印的是数组的元素内容,因此使用
for each
循环来打印它:使用
for each
循环打印也很麻烦,Java标准库提供了Arrays.toString()
,可以快速打印数组内容:数组排序
每一轮循环后,最大的一个数被交换到末尾,因此,下一轮循环就可以“刨除”最后的数,每一轮循环都比上一轮循环的结束位置靠前一位。
Java的标准库已经内置了排序功能,只需要调用JDK提供的
Arrays.sort()
就可以排序: