从length与length()开始谈Java

本文详细解析了Java中数组与String对象长度属性的原理与区别,包括数组的length属性与String对象的length()方法,解释了数组为何有length属性而String对象为何有length()方法,并探讨了为何不定义一个专门的Array类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接: Start from length & length() in Java


首先请看下面的问题,你能快速地回答上来吗?

  • 假设没有任何集成开发环境和自动补全功能,如何获取数组的长度?如何取得字符串的长度?

我将为  新手以及中等水平这个水平之间的开发者回答这个问题:。因为他们中的很多人并不能正确回答出来,或者是对自己的答案缺乏信心(译者注: 老外的初级程序员真的这样么).

虽然IDE提供了方便快捷的代码补全功能,但同时也附带了一个缺点,称为 表面上很了解(surface understandin)。

本文将解释Java数组的一些重要概念。

上面问题的答案是:

  1. int[] arr = new int[3];  
  2. System.out.println(arr.length);//数组长度   
  3.    
  4. String str = "abc";  
  5. System.out.println(str.length());//字符串长度  
int[] arr = new int[3];
System.out.println(arr.length);//数组长度
 
String str = "abc";
System.out.println(str.length());//字符串长度
问题是为什么数组有length属性域而String没有呢?或者说为什么字符串对象有 length() 方法而数组没有呢?

1. 为什么数组有length属性?
首先,数组是一个容器对象,用于保存单个类型的固定数量的值。在数组创建以后,其长度是固定不变的。所以数组的length属性可以作为一个final域存在.

因此length可以作为数组(array)的定义属性(defining attribute).

数组有两张创建方式:

1) new 数组创建表达式

2) 大括号形式的数组初始化器( array initializer)

数组在创建的时候,其大小就被指定了.

上面的例子中就使用到了数组创建表达式( array creation expression ),表达式指定了元素的类型, 数组的维度,以及最少要指定最顶层维度的大小。

下面的声明也是合法的,因为指明了数组的维度以及顶层维度的大小。

  1. int[][] arr = new int[3][];  
int[][] arr = new int[3][];
数组初始化器(array initializer) 通过指定包含的所有元素来创建一个数组,在大括号"{ }"中用分号(,)分开的表达式列表.例如:

  1. int[] arr = {1,2,3};  
int[] arr = {1,2,3};
2. 为什么不像String一样定义一个"Array"类呢?
既然数组是对象,那么下面的代码就是合法的:

  1. Object obj = new int[10];  
Object obj = new int[10];
数组对象含有所有从Object类继承的成员(除了 clone 方法).为什么没有定义一个array的类呢? 我们也不能找到一个叫做 Array.java 的类(文件).
一个粗略的即使是这个类对开发者不可见。

可以思考这个问题? —— 如果有一个显式的Array类,那么它应该是什么样子呢? 它仍然需要一个数组来保存 数组元素,对吧?  因此定义这样一个类是不太合理的。

实际上我们可以得到一个数组的 class(属性),代码如下所示:

  1. int[] arr = new int[3];  
  2. System.out.println(arr.getClass());  
int[] arr = new int[3];
System.out.println(arr.getClass());
输出结果:

  1. class [I  
class [I
"class [I" 代表 "一个成员类型是 int 的数组"  的运行时签名.
3. 为什么String有length() 方法呢?
String对象背后的数据结构是 char 字符数组, 并不需要定义一个不怎么用到的属性域, 和C语言不一样,在Java中一个 char型的数组并不是String。
### Java 中 `length` 的用法 在 Java 编程语言中,`length` 是一个用于获取数组大小或字符串长度的关键属性。对于不同类型的对象,`length` 属性的应用方式有所不同。 #### 数组中的 `length` 当处理数组时,可以通过访问数组实例的 `length` 属性来获得该数组所含元素的数量。下面是一个简单的例子展示如何利用这一特性: ```java int[] numbers = new int[10]; // 创建一个含有十个整数位置的数组 System.out.println("The array has " + numbers.length + " elements."); // 输出"The array has 10 elements." ``` 这段代码创建了一个名为 `numbers` 的整型数组,并初始化其容量为 10。通过调用 `numbers.length` 可以得到这个数组的实际尺寸[^1]。 #### 字符串中的 `length()` 不同于数组直接拥有 `length` 属性,在 String 类里则提供了一个叫做 `length()` 的方法用来返回字符串内字符的数量。这里有一个具体的案例说明这一点: ```java String greeting = "Hello"; System.out.println(greeting.length()); // 打印5,因为"Hello"由五个字母组成 ``` 此片段定义了一条消息并打印出了它的长度——即它包含了多少个字符[^2]。 #### 集合框架下的集合类(如 List) 除了基本的数据结构外,Java 提供了丰富的集合库,其中许多实现了 Collection 接口的对象也支持类似的机制来查询它们内部存储项目的数量。例如 ArrayList 或 LinkedList 实现了 size 方法作为替代方案: ```java import java.util.ArrayList; ArrayList<String> list = new ArrayList<>(); list.add("Apple"); list.add("Banana"); // 使用size()方法代替length属性 System.out.println(list.size()); ``` 上述代码展示了向列表添加两个水果名称后报告当前项目总数的过程[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值