在开始本文前先考虑以下一个问题
在不使用任何带有自动补全功能IDE的情况下,如何获取一个数组的长度?以及,如何获取一个字符串的长度?
这个问题我问过不同水平的程序员,包括初级和中级水平的。他们都不能准确而自信地回答这个问题(如果你能很准确很自信的回答这个问题,那么证明针对这一知识点你比大多数中级程序员掌握的好)。由于现在很多IDE都有代码补全功能,这使得开发人员在很多问题上都理解的很肤浅。
上面问题的正确回答姿势应该是这样的:
int[] arr = new int[3]; System.out.println(arr.length);//使用length获取数组的程度 String str = "abc"; System.out.println(str.length());//使用length()获取字符串的长度
那么问题来了,为什么数组有length属性,而字符串没有?或者,为什么字符串有length()方法,而数组没有?
为什么数组有length属性?
首先,数组是一个容器对象,其中包含固定数量的同一类型的值。一旦数组被创建,他的长度就是固定的了。数组的长度可以作为final实例变量的长度。因此,长度可以被视为一个数组的属性。
有两种创建数组的方法:
1、通过数组表达式创建数组。
2、通过初始化值创建数组。
无论使用哪种方式,一旦数组被创建,其大小就固定了。
使用表达式创建数组方式如下,该方式指明了元素类型、数组的维度、以及至少一个维度的数组的长度。
该声明方式是符合要求的,因为他指定了一个维度的长度(该数组的类型为int,维度为2,第一维度的长度为3)
int[][] arr = new int[3][];
使用数组初始化的方式创建数组时需要提供所有的初始值。形式是使用{和}将所有初始值括在一起并用,隔开。
int[] arr = {1,2,3};
注:
这里可能会有一个疑问,既然数组大小是初始化时就规定好的,那么int[][] arr = new int[3][];定义的数组并没有给出数组的第二维的大小,那么这个arr的长度到底是如何“规定好”的呢?
其实,arr的长度就是3。其实Java中所有的数组,无论几维,其实都是一维数组。例如arr,分配了3个空间,每个空间存放一个一维数组的地址,这样就成了“二维”数组。但是对于arr来说,他的长度就是3。
int[][] a=new int[3][]; System.out.println(a.length);//3 int[][] b=new int[3][5]; System.out.println(b.length);//3
Java中为什么没有定义一个类似String一样Array类
因为数组也是对象,所以下面的代码也是合法的:
Object obj = new int[10];
数组包含所有从Object继承下来方法(Java中数组的继承关系),除clone()之外。为什么没有一个array类呢?在Java中没有Array.javahtml" target="_blank">文件。一个简单的解释是它被隐藏起来了(注:Java中的数组有点类似于基本数据类型,是一个内建类型,并没有实际的类与他对应)。你可以思考这样一个问题——如果有一个Array类,那它会像什么样?它会仍然需要一个数组来存放所有的数组元素,对吗?因此,定义出一个Array类不是一个好的主意。(译者注:这里可能有点绕,道理有点类似于:鸡生蛋蛋生鸡问题,可能比喻也不是很恰当,请读者自行理解)
事实上我们可以获得数组的类定义,通过下面的代码:
int[] arr = new int[3]; System.out.println(arr.getClass());
输出:
class [I
“class [I”代表着”成员类型是int的数组”的class对象运行时类型的签名
为什么String有length()方法?
String背后的数据结构是一个char数组,所以没有必要来定义一个不必要的属性(因为该属性在char数值中已经提供了)。和C不同的是,Java中char的数组并不等于字符串,虽然String的内部机制是char数组实现的。(注:C语言中,并没有String类,定义字符串通常使用char string[6] = "hollis";的形式)
注:要想把char[]转成字符串有以下方式:
char []s = {'a','b','c'}; String string1 = s.toString(); String string2 = new String(s); String string3 = String.valueOf(s);
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用Java能有所帮助,如果有疑问大家可以留言交流。
问题内容: 为什么要将数组的长度作为属性,而对于,我们有一个方法? 问题答案: 让我首先强调三种用于类似目的的不同方式。 - 阵列() -知道数组的长度 - 与字符串相关的对象(等)-了解字符串的长度 - 集合对象(等)-知道集合的大小 现在忘记考虑正义length和正义。 不是方法,因此完全无法在对象上使用是完全有意义的。它仅适用于数组。 它的名称更好地描述了它,并且因为它是一种方法,将在我上面
本文向大家介绍Java中的length和length()有什么区别?,包括了Java中的length和length()有什么区别?的使用技巧和注意事项,需要的朋友参考一下 的长度是一个数组的实例变量在Java中,而长度()是一个String类的方法。 长度 一个数组是一个对象,其保持相同的TY值的固定数量的PE。 的长度在一个数组变量返回的数组的长度,即一个号码存储在数组中的元素。 数组初始化后,
问题内容: 好的,所以我有这段代码: 我的问题是,为什么是和不是。我以为得到你使用而不是数组的长度。您是否因为尝试获取字符串而不是数组的长度而使用?PS我是一个初学者,所以这对您来说似乎很明显,但对我而言却不是。 问题答案: 他们是两个完全不同的东西。 是 arrays 的属性。那不是方法调用。 是对的方法调用。 您看到了这两者,因为首先,您要遍历数组的长度。数组的内容是,并且您希望将它们的所有长
length 方法 设置或返回数组中元素的数目。 语法: arrayObject.length; arrayObject.length = n; 说明: 数组的 length 属性总是比数组中定义的最后一个元素的下标大 1。对于那些具有连续元素,而且以元素 0 开始的常规数组而言,属性 length 声明了数组中的元素的个数。 数组的 length 属性在用构造函数 Array() 创建
length 方法 返回字符串中的字符数目。 语法: stringObject.length; 示例: var Str = "KILLHAPPY", l = Str.length; console.log( l ); 结果: >>> 9
描述 (Description) Javascript数组length属性返回一个无符号的32位整数,该整数指定数组中的元素数。 语法 (Syntax) 其语法如下 - array.length 返回值 (Return Value) 返回数组的长度。 例子 (Example) 请尝试以下示例。 <html> <head> <title>JavaScript Array leng
描述 (Description) 它将以逗号或空格分隔的值列表作为参数,并返回表示列表中元素数量的整数。 例子 (Example) 以下示例演示了在LESS文件中使用length函数 - <!doctype html> <head> <title>Less Length Function</title> <link rel = "stylesheet" href =
描述 (Description) 此函数返回EXPR值的长度(以字符为单位),如果未指定,则返回$ _。 如果要确定相应的大小,请在数组或散列上使用标量上下文。 语法 (Syntax) 以下是此函数的简单语法 - length EXPR length 返回值 (Return Value) 此函数返回字符串的大小。 例子 (Example) 以下是显示其基本用法的示例代码 - #!/usr/bin