java中length()_从Java中的length和length()开始

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

在不使用具有任何代码自动补全功能的IDE的情况下,如何获取一个数组的长度使用,又如何如何获取字符串的长度呢?

我曾经开门见山地向不同水平的开发者问了这个问题,他们无法准确而自信地回答这个问题。IDE在提供可靠的自动代码补全功能的同时,也使得我们对于知识的掌握程度停留在表面水平。在这篇文章中,我将会解释一些关于数组的关键概念。

好吧,上面问题的答案是:

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字段而字符串没有呢?又为什么字符串有length()方法而数组没有呢?

问题1 为什么数组有length属性?

首先,数组是一个保存固定大小的单一类型的对象的容器。数组一经创建,其length不会改变[1]。数组的length是可以得到的作为一个final的实例变量。因此,length可以认为是数组的一个规定的属性。数组可以通过两种方式创建:1)数组声明表达式 2)数组初始化器。一旦创建,其大小就被固定了。数组的声明表达式已经在上面的例子中使用了,它指出了元素的类型,数组的维数,以及数组至少一维的长度。下面的声明也是合法的,因为它声明了多维数组中的一个的长度。

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

数组初始化器在声明的同时给定了初始值,它是写成一个用花括号包起来的逗号分隔的列表的形式。

举个例子,

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

问题2 为什么没有一个像“String”那样的叫做"Array"的类呢?

既然数组是一个对象,那么下面的代码是合法的:

Object obj = new int[10];

数组包含了所有的从Object那里继承而来的成员(除了clone)。为什么没有数组类的定义呢?我们找不到一个叫做Array.java的文件,一个模棱两可的解释是这个文件是对我们隐藏了。你能够想象一下,如果有一个数组类,它会长什么样呢?它依然需要一个数组来保存数组的数据,对吧?因此,定义数组这样的一个类不是一个好主意。

事实上,我们可以通过下面的代码得到数组的类:

int[] arr = new int[3];

System.out.println(arr.getClass());

输出:

class [I

“class [I” 代表了“一个装了int类型数据的数组对象”的运行时类型符号。

问题3 为什么String有length()方法呢?

字符串的内部是使用字符数组来实现的。不需要定义一个在任何程序中都不需要的字段,与C语言不同,在Java中字符数组不是字符串。

原文链接

ps:关于博主对数组的一些看法可以参考博主的之前的文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值