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 数组。
从这些方面,我们无法得出合理的结论。
TA贡献1817条经验 获得超14个赞
这取决于。
从实用的角度来看,这本书是正确的。一个 Java 字符串,最后代表一个字符值数组。但请注意,这是一个实现细节!String 类可以在内部使用 Character 值的链接列表。这可能非常低效,但仍有可能。使用字符数组是自然的选择,但不是唯一的选择。
但从编译器构造的角度来看,这是两种不同的类型。Java 中的字符串派生自 Object。String 类型与 char[] 或 Character[] 类型完全不同。他们甚至不“相关”。
所以这本书有点对,(恕我直言)有点明显错误。
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 中:
当然,JavaString
类的设计者也考虑到了这一点,并让String
继承自Object
(请参阅上面的代码);与数组没有 is-a-relationship。
添加回答
举报