为了账号安全,请及时绑定邮箱和手机立即绑定

一本名著证实java字符串是一个数组?

一本名著证实java字符串是一个数组?

叮当猫咪 2021-10-06 11:05:00
我的大卫·帕特森 (John Hennessy) 的“计算机组织和设计”一书在“自我检查”部分中有一个问题,该问题证实了“字符串只是 C 和 Java 中单维字符数组的非正式名称”这一说法。是真的。我相信在 C 中就是这种情况,但是在 Java 中,这是完全错误的。我一直在这本书的勘误版本中搜索,但一无所获。我错了吗?我基本上需要帮助。
查看完整描述

3 回答

?
达令说

TA贡献1821条经验 获得超6个赞

将 a Stringas 视为围绕char[]数组构建的 Java 概念。


它是一个包含char[]数组并提供一堆有用方法的类。


public final class String

    implements java.io.Serializable, Comparable<String>, CharSequence {

    /** The value is used for character storage. */

    private final char value[];

    ...

}

字符串只是 C 和 Java 中单维字符数组的非正式名称。


我觉得这个说法不准确。String是一个基本的、众所周知的 JDK 类,所以我们不能说它只是一个“非正式名称”。


我设法找到了“Java 中的字符和字符串”一章(第 2.9 章)和 OP 所指的“检查自己”块。作者广泛地描述了 Java 中的字符串,只是说


Java 使用 Unicode 作为字符


然后


字符串是一个标准的 Java 类,具有特殊的内置支持和用于连接、比较和转换的预定义方法。与 C 不同,Java 包含一个给出字符串长度的词,类似于 Java 数组。


从这些方面,我们无法得出合理的结论。


查看完整回答
反对 回复 2021-10-06
?
大话西游666

TA贡献1817条经验 获得超14个赞

这取决于。

从实用的角度来看,这本书是正确的。一个 Java 字符串,最后代表一个字符值数组。但请注意,这是一个实现细节!String 类可以在内部使用 Character 值的链接列表。这可能非常低效,但仍有可能。使用字符数组是自然的选择,但不是唯一的选择。

但从编译器构造的角度来看,这是两种不同的类型。Java 中的字符串派生自 Object。String 类型与 char[] 或 Character[] 类型完全不同。他们甚至不“相关”。

所以这本书有点对,(恕我直言)有点明显错误。


查看完整回答
反对 回复 2021-10-06
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

这取决于你的观点。


是的,字符串是数组 - 一个实现的角度


在你的源代码中java.lang.String可以清楚地发现:


public final class String

implements java.io.Serializable, Comparable<String>, CharSequence

{

/** The value is used for character storage. */

    private final char value[];

//...

不,字符串不是数组 - 设计观点


但是,从设计的角度来看,没有一个好的模型设计者会选择继承(is-a 关系)层次结构,例如


字符串扩展数组


或在 UML 中:

//img1.sycdn.imooc.com//615d2692000117fc03150065.jpg

当然,JavaString类的设计者也考虑到了这一点,并让String继承自Object(请参阅上面的代码);与数组没有 is-a-relationship。


查看完整回答
反对 回复 2021-10-06
  • 3 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信