首先,你能快速回答以下问题吗?
没有任何IDE的代码能自动完成,如何获取数组的长度?以及如何获取一个字符串的长度?
我问不同水平(入门和中级)的开发人员这个问题。他们都不能正确或自信地回答这个问题。虽然IDE提供了方便的代码来自动完成,它也带来了“表面理解”的问题。在这篇文章中,我将解释有关Java数组的一些关键概念。
答案:
int[] arr = new int[3];
System.out.println(arr.length);//length for array
String str = "abc";
System.out.println(str.length());//length() for string
现在的问题是,为什么数组有长度这个属性,但字符串就没有?或者为什么字符串有length()方法,而数组没有?
Q1.为什么数组有length属性?
首先,一个数组是包含单一个数据类型的一组固定长度的值的容器对象。数组被创建后,其长度不会改变[1]。数组的长度可作为恒定不变的final实例变量的长度。因此,长度可以被看作是一个数组的定义属性。
一个数组可以通过两种方法来创建:1)数组创建表??达式2)数组初始化器。当数组一被创建,其数组长度已被指定。
上面的例子就是用数组创建表??达式创建的。它指定了数组元素类型、数组的维度,以及嵌套数组中至少一个维度的数组长度。
这个声明也是合法的,因为它指定嵌套中一个维度的长度。
int[][] arr = new int[3][];
数组初始器创建一个数组,并指定其所有组件的初始值。可以用逗号分隔的列表并用大括号{}括起来的表达式来初始化。
举个例子来说,
int[] arr = {1,2,3};
Q2.为什么没有一个类似于“String”的类来定义一个名为“Array”的类?
由于数组是一个对象,下面的代码是合法的。
Object obj = new int[10];
一个数组包含所有成员继承Object类(克隆除外)。为什么没有一个数组的类定义?我们无法找到一个Array.java文件。粗略的解释是,这个类隐藏了,我们不可见。你可以想想这个问题 - 如果有这么一个Array类,它会是什么样的呢?它仍然需要一个数组来保存数组数据,对不对?因此,定义这么一个类不是个好主意。
实际上,我们可以通过使用下面的代码得到的数组类:
int[] arr = new int[3];
System.out.println(arr.getClass());
Output:
class [I
"class [I"代表的是int数组对象运行时的签名
Q3.为什么字符串有length()方法?
一个字符串的备份数据结构是一个char数组。没有必要定义一个字段,对每一个应用程序也是没必要的。不像C语言,一个字符数组不是在Java语言中的String。