P45*_*ent 22 java language-lawyer
考虑
String foo = s.toString();
Run Code Online (Sandbox Code Playgroud)
对于非null java.lang.String实例s.
这是定义为自己返回,还是由特定的Java实现决定?出于兴趣是一个"深刻的副本"采取?
检查我的JDK源代码确认s已返回,但JLS是否坚持这一点?我已经被认为toString()是一种任意的序列化,也许是对象的代表,但不一定如此.例如,完全合理(至少在我看来)实现可以用引号字符包围字符串.
Sur*_*tta 20
它返回自己
/**
* This object (which is already a string!) is itself returned.
*
* @return the string itself.
*/
public String toString() {
return this;
}
Run Code Online (Sandbox Code Playgroud)
查看源代码,您可以轻松找到它.
我确信我们无法为每个方法的实现找到Java语言规范.就像toString()String类的任何其他Java类方法一样只返回它自己的字符串表示.
更新:
既然你的实际问题是关于为什么它自己返回而不是副本或者像引号一样的黑客来制作一个新的String,我会稍微不同意.我的理由相同(可能还有其他很好的理由),因为你toString()在实际的字符串实例(s)本身上调用方法,我认为这里没有任何害处.如果你想玩游戏,那么s无论如何你都会直接使用实例.
Boa*_*ann 19
是.请参阅Java语言规范§1.4 - 与预定义类和接口的关系:
如上所述,此规范通常是指Java SE平台API的类.特别是,某些类与Java编程语言有特殊的关系.实例包括类,如
Object,Class,ClassLoader,String,Thread,和在包中的类和接口java.lang.reflect,等等.此规范约束此类和接口的行为,但不提供完整的规范.读者可以参考Java SE平台API文档.
所以这些类的javadoc(这是"Java SE平台API文档")是规范性的,是整个语言规范的一部分.并明确说明:
public String toString()这个对象(已经是一个字符串!)本身就返回了.
没有解释的余地.
(如果他们改变它做任何不同的事情,它会打破无数的程序.)
| 归档时间: |
|
| 查看次数: |
1876 次 |
| 最近记录: |