一个人至少拥有一个梦想,有一个理由去坚强

心若没有栖息的地方,到哪里都是在流浪

java基础系列 05 | Java中的length和length()

首先,你能快速回答下面的问题吗?

没有任何编辑工具IDE自动提示的情况下,如何获得数组的长度?以及如何获得 String 的长度?

若向不同级别的开发人员提出这个问题,没几个人能正确或自信地回答此问题。虽然IDE提供了方便的代码自动提示,但它也带来了  “surface understanding”  的问题。有些问题我们只是浅显地明白,并没有真正的理解。在这篇文章中,我将解释一些关于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 属性字段但 String 没有?或者为什么 String 有 length() 方法而 array 没有?

Q1.为什么数组有  length  熟悉?

首先,数组是一个容器对象,它包含固定数量的单一类型的值。创建数组后,其长度永远不会改变。数组的长度可用作最终实例变量长度。因此,长度可以被视为数组的定义属性。

可以通过两种方法创建数组:1) 数组创建表达式 。 2)数组初始值设定项。

当数组创建时,大小已经指定。

在上面的示例中使用了数组创建表达式。它指定了至少一个嵌套级别的元素类型,嵌套数组的级别数和数组的长度。

此声明也是合法的,因为它指定了嵌套级别之一。

int[][] arr = new int[3][];

数组初始值设定项创建一个数组并为其所有组件提供初始值。它被编写为以逗号分隔的表达式列表,用大括号 {and}括起来。

例如:

int[] arr = {1,2,3};

Q2.为什么没有像 “String” 那样定义类 “Array”?

由于数组是对象,因此以下代码是合法的.

Object obj = new int[10];

数组包含从 Object 类继承的所有成员(clone 除外)。为什么没有数组的类定义?我们找不到 Array.java 文件。一个粗略的解释是它们对我们隐藏了。你可以考虑一个问题 – 如果有一个类 Array,它会是什么样子?它仍然需要一个数组来保存数组数据,对吧?因此,定义这样一个类并不是一个好主意。

实际上我们可以使用以下代码获取数组的类:

int[] arr = new int[3];
System.out.println(arr.getClass());

输出:

class [I

“class [I”  代表类对象的运行时类型签名,组件类型为 int”。

Q3. 为什么 String 有 length() 方法?

String 的备份数据结构是 char 数组。与C不同,在Java编程语言中,与C不同,char数组不是String,并且字符串和char数组都不会被’\ u0000’(NUL字符)终止。String对象是不可变的,也就是说,它的内容永远不会改变,而char数组有可变元素。

类String中的toCharArray方法返回一个包含与String相同字符序列的字符数组。 StringBuffer类在可变字符数组上实现了有用的方法。

 

更多精彩,请扫码关注博主个人微信公众号

《java基础系列 05 | Java中的length和length()》

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注