toString() 是否被定义为为 java.lang.String 返回此值?

2022-09-02 00:13:01

考虑

String foo = s.toString();

对于非实例 。nulljava.lang.Strings

这是定义为返回自身,还是取决于特定的Java实现?出于兴趣,是“深度复制”吗?

检查我的JDK源代码可以肯定返回,但是JLS是否坚持这一点?我从小就被认为是一个任意的序列化,也许代表了对象,但不一定是这样。例如,完全合理的(至少在我看来)一个实现可以用引号字符括起来。stoString()


答案 1

你不会在JLS中找到任何保证,但你在javadoc中确实有一个:

此对象(已经是一个字符串!)本身被返回。


答案 2

是的。请参阅 Java 语言规范 §1.4 – 与预定义类和接口的关系

如上所述,此规范通常引用 Java SE 平台 API 的类。特别是,某些类与 Java 编程语言具有特殊的关系。例子包括、、、、以及包中的类和接口等。此规范约束此类类和接口的行为,但不为它们提供完整的规范。读者请参阅 Java SE 平台 API 文档。ObjectClassClassLoaderStringThreadjava.lang.reflect

因此,这些类的javadoc(即“Java SE平台API文档”)是规范的,并且是整个语言规范的一部分。这明确指出

public String toString()

此对象(已经是一个字符串!)本身被返回。

没有解释的余地。

(如果他们改变它以做任何不同的事情,它会破坏无数的程序。


推荐