String 的 toString() 方法有什么实际用途吗?

2022-09-02 03:02:02

我正在阅读文档并注意到它。从来没有想象过。描述:

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

除了填充约定或使用计算资源之外,Java中的a在使用本身不会做什么?为什么它不简单地继承从类?.toString()StringString.toString()java.lang.Object

编辑:

我理解,在多态性的情况下,必须存在自己的方法,因为它覆盖了其父方法。我想知道在第一个问题中,是否有任何情况,你会在使用/和使用/之间得到一些不同的东西。toString()toString()stringVariable"String value"stringVariable.toString()"String value".toString()

例如 gr.:类似输出操作或值赋值,如 .System.out.println(stringVariable.toString());stringVariable = "String value".toString();


答案 1

除了填充约定或使用计算资源之外,Java 中的 .toString() 在 String 上做了什么,而使用 String 本身却不会呢?

这意味着它在多态调用时给出了适当的结果。

为什么它不简单地从java.lang.Object类继承.toString()?

因为这不会给出相同的结果,而且几乎肯定不会给出预期的结果。

Object.toString()旨在提供对象的合理有用的字符串表示形式。该实现提供有关类型和值的信息,可用于粗略的标识提示(诊断上有用,但仅此而已)。这显然不是字符串最有用的字符串表示形式 - 字符串本身才是。Object

虽然我会说这是一个以相当毛茸茸的方式定义的遗憾(目前还不清楚结果是否适用于机器,开发人员或用户消费),但对我来说很明显,a会在实现中返回自己。toStringString


答案 2

实例:

public abstract class MetadataProcessor {

protected void processMetadata() {    
   Map<String, Object> metadata = getMetadata();
   for(String key : metadata.keySet()) {
      if(metadata.get(key) instanceof Date) {
      processDate(metadata.get(key));
   } else { //String or any other object type
      processString(metadata.get(key).toString());
   }
}

private void processDate(Date date) {
   (...)
}

private void processString(String string) {
   (...)
}

/**
* contains document's metadata, values must be String or Date
**/
protected abstract Map<String, Object> getMetadata();
}

如果 String 的 .toString() 不会返回 String 本身,则在上面的代码中需要一个额外的代码。if(foo instanceof String)