java语言中,数组是一种最简单的复合数据类型。数组是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和下标来唯一地确定数组中的元素。数组有一维数组和多维数组。
从对数组对象的进一步探讨,可以稍微了解Java对对象处理的一些方法。首先来看看一维数组的引用名称的定义:
int[] arr =
null;
在这个定义中,arr表示一个可以参考引用自一维数组对象的变量名称,但是目前将这个名称参考引用自null,表示还没有指定这个名称参考引用自实际的对象。在Java中,=运算用于基本数据类型时,是将值复制给变量,但当它用于对象时,则是将对象指定给参考引用名称来参考引用。也可以将同一个对象指定给两个参考引用名称,当对象的值由其中一个参考引用名称进行操作而变更时,另一个参考引用名称所参考引用到的值也会变动。下面来看看范例5.8的示范。
ü
范例5.8 AdvancedArray.java
public class AdvancedArray
{
public static void main(String[] args)
{
int[] arr1 = {1, 2, 3, 4,
5};
int[] tmp1 =
arr1;
int[] tmp2 =
arr1;
System.out.print("通过tmp1取出数组值:");
for(int i = 0; i < tmp1.length;
i++)
System.out.print(tmp1[i] + "
");
System.out.print("\n通过tmp2取出数组值:");
for(int i = 0; i < tmp2.length;
i++)
System.out.print(tmp2[i] + "
");
tmp1[2] =
9;
System.out.print("\n\n通过tmp1取出数组值:");
for(int i = 0; i < tmp1.length;
i++)
System.out.print(tmp1[i] + "
");
System.out.print("\n通过tmp2取出数组值:");
for(int i = 0; i < tmp2.length;
i++)
System.out.print(tmp2[i] + "
");
System.out.println();
}
}
执行结果:
通过tmp1取出数组值:1 2 3 4
5
通过tmp2取出数组值:1 2 3 4 5
通过tmp1取出数组值:1 2 9 4
5
通过tmp2取出数组值:1 2 9 4
5
在这个范例中,通过tmp1名称改变了索引2的元素值,由于tmp2也引用自同一数组对象,所以tmp2取出索引2的元素值是改变后的值。事实上在范例5.8中,有三个引用名称引用自同一个数组对象,也就是arr1、tmp1与tmp2,所以,如果取出arr1索引2的元素,元素值也会是9。
了解到在Java中数组是一个对象,而使用=指定时是将对象指定给数组名来引用,而不是将数组进行复制。如果想将整个数组的值复制给另一个数组该如何作呢?可以使用循环,将整个数组的元素值遍历一遍,并指定给另一个数组相对应的索引位置。
Java中的数组作为对象带来的好处
1)越界检查
2)length
field:与传统的C++中的数组相比,length字段可以方便的得到数组的大小;但要注意,仅仅可以得到数组的大小,不能得到数组中实际包含多少个元素,因为length
只会告诉我们最多可将多少元素置入那个数组。
3)
初始化:对象数组在创建之初会自动初始化成null,由原始数据类型构成的数组会自动初始化成零(针对数值类型),(Char)0 (针对字符类型)或者false
(针对布尔类型)。
4)
数组作为返回值:首先,既然数组是对象,那么就可以把这个对象作为返回值;而且,不必担心那个数组的是否可用只要需要它就会自动存在而且垃圾收集器会在我们完成后自动将其清除