【问题标题】:In Java why is length a method for Strings, while it is a variable for Arrays? [duplicate]在Java中,为什么长度是字符串的方法,而它是数组的变量? [复制]
【发布时间】:2012-12-10 21:47:48
【问题描述】:

可能重复:
Why is String.length() a method?

如果我想知道数组的长度,我必须输入以下内容:

array.length

因此,它是一个变量,其中写入了称为'array'的数组的长度。

在字符串上,同样的事情看起来像这样:

string.length()

因此,它是一个返回“字符串”变量长度的方法。

但是为什么他们选择让这两个不同,而它基本上做同样的事情......这是因为效率还是其他原因?

提前谢谢你。

【问题讨论】:

  • 第一个可以看作是对象数组的一个属性,第二个是访问对象字符串的方法。如果我错了,我正在等待纠正。
  • “为什么会这样”的问题通常不适用于本论坛。试试 (programmers.se](programmers.stackexchange.com)
  • 这基本上是历史/传统。从理论上讲,数组可以使用length() 或字符串可以使用length(概念上是只读实例字段),但它们的开始方式不同。在代码解释/生成方面,将数组 length 作为伪字段有一些微小的优势,但这种优势虽然在 Java 诞生之初就存在,但在现代实现中已基本消失。
  • @JBNizet -- length 是数组的公共字段,但没有人可以更改它。这是一个奇怪的特殊情况——架构上的一个缺陷。
  • 我暂时忘记了final关键字,不知道为什么:-/

标签: java


【解决方案1】:

好问题。

数组的大小是固定的,因此有一个公共的最终长度字段。

字符串正在实现具有需要实现的 length() 函数的 CharSequence 接口。

【讨论】:

  • 是的,确实如此。我想我是精神错乱了~)
  • 从未“计算”过长度。 char 数组共享是在幕后以不可见的方式完成的,并且对 API 没有任何功能影响。
  • CharSequence 接口是一个非常晚的发明。
  • @Hot: true 但这就是字符串实现只返回其内部字段的原因
猜你喜欢
  • 2014-12-13
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-25
  • 2012-03-31
  • 2019-05-18
  • 2013-05-23
相关资源
最近更新 更多