String的toString()方法有任何实际用途吗?

时间:2012-07-08 20:22:59

标签: java string tostring

我正在阅读the docs并注意到它。永远不会想象它。说明:

  

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

除了填充约定或使用计算资源之外,Java中的.toString()对使用String本身的String执行的操作不会是什么?为什么不直接从类.toString()继承java.lang.Object

编辑:

我理解在多态的情况下,必须存在自己的toString()方法,因为它覆盖了它的父toString()。我想在第一个问题中想知道的是,在使用stringVariable / "String value"和使用stringVariable.toString() / "String value".toString()之间是否存在任何不同之处。< / p>

实施例。 gr。:System.out.println(stringVariable.toString());之类的输出操作或stringVariable = "String value".toString();之类的值赋值。

5 个答案:

答案 0 :(得分:35)

  

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

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

  

为什么不直接从java.lang.Object类继承.toString()?

因为这不会产生相同的结果,几乎肯定不会产生所需的结果。

Object.toString()旨在为对象提供一个相当有用的字符串表示。 Object实现提供了有关可用于粗略身份提示的类型和值的信息(在诊断上有用,但这就是全部)。这显然是字符串最有用的字符串表示形式 - 字符串本身就是。

虽然我说很遗憾toString以一种非常粗暴的方式定义(目前尚不清楚结果是否适用于机器,开发人员或用户消费),对我来说很明显,String会在实现中返回。

答案 1 :(得分:1)

实际例子:

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)

答案 2 :(得分:1)

很明显,但是避免使用(foo instanceof String)的另一个答案是在处理泛型时。

获取每个对象的字符串表示形式会很烦人,但是字符串是奇怪的家伙,需要额外的代码才能获得相同的结果。

答案 3 :(得分:0)

在java中实现toString方法是通过覆盖Object的{​​{1}}方法完成的。当我们需要对象的字符串表示时,使用java toString方法。它在toString()类中定义。可以重写此方法以自定义Object的{​​{1}}表示。

答案 4 :(得分:0)

public final class String
extends Object
implements Serializable, Comparable<String>, CharSequence

请参阅:https://docs.oracle.com/javase/10/docs/api/java/lang/String.html

所有对象都有toString()方法(请参阅https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html#toString())。 String是一种对象,因此,它还需要一个方法toString()来从其基类实现方法。