Java 字符串';s toString()方法有什么实际用途吗?

Java 字符串';s toString()方法有什么实际用途吗?,java,string,tostring,Java,String,Tostring,我在看书,注意到了。我从来没有想象过。说明: 这个对象(已经是字符串!)本身被返回 除了填充约定或使用计算资源外,Java中的.toString()对字符串做了哪些使用字符串本身不会做的事情?为什么它不直接从类java.lang.Object继承.toString() 编辑: 我知道在多态性的情况下,必须存在自己的toString()方法,因为它覆盖了其父级的toString()。在第一个问题中,我想知道的是,在使用stringVariable/“String value”和使用stringVa

我在看书,注意到了。我从来没有想象过。说明:

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

除了填充约定或使用计算资源外,Java中的
.toString()
字符串
做了哪些使用
字符串
本身不会做的事情?为什么它不直接从类
java.lang.Object
继承
.toString()

编辑:

我知道在多态性的情况下,必须存在自己的
toString()
方法,因为它覆盖了其父级的
toString()
。在第一个问题中,我想知道的是,在使用
stringVariable
/
“String value”
和使用
stringVariable.toString()
/
“String value.toString()”
之间,是否有什么不同的情况

例如:像
System.out.println(stringVariable.toString())这样的输出操作或类似于
stringVariable=“String value”.toString()的值赋值

除了填充约定或使用计算资源外,Java中的.toString()对使用字符串本身不会执行的字符串做了什么

这意味着当以多态方式调用时,它会给出适当的结果

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

因为这不会产生相同的结果,而且几乎肯定不是期望的结果

Object.toString()
旨在为对象提供一个相当有用的字符串表示形式。
对象
实现提供了有关类型和值的信息,这些信息可用于粗略的标识提示(诊断有用,但仅此而已)。对于字符串来说,这显然不是最有用的字符串表示法——字符串本身就是


虽然我要说的是,很遗憾,
toString
的定义非常模糊(不清楚结果是用于机器、开发人员还是用户消费),我觉得很明显,
字符串
将在实现中返回自身。

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

实用示例:

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();
}
公共抽象类MetadataProcessor{
受保护的void processMetadata(){
映射元数据=getMetadata();
for(字符串键:metadata.keySet()){
if(metadata.get(key)instanceof Date){
processDate(metadata.get(key));
}else{//String或任何其他对象类型
processString(metadata.get(key.toString());
}
}
私有作废处理日期(日期){
(...)
}
私有void processString(字符串){
(...)
}
/**
*包含文档的元数据,值必须为字符串或日期
**/
受保护的抽象映射getMetadata();
}
如果字符串的.toString()不返回字符串本身,则在上述代码中需要额外的
If(foo instanceof String)

public final class String
public final class String
extends Object
implements Serializable, Comparable<String>, CharSequence
扩展对象 实现可序列化、可比较的字符序列
见:


所有对象都有
toString()
方法(请参阅)。
String
是对象的一种类型,因此,它还需要一个方法
toString()
从其基类实现方法。

显然很旧,但另一个避免需要(foo instanceof String)的答案是在处理泛型时


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

有效的Java项目10讨论了避免完全指定
toString()的一些原因
:因为有人会不可避免地认为解析它是一个好主意。@TrevorTrovalds:文档是否已经回答了这个问题?它返回“this object”-因此不,没有使用
foo
foo.toString()的情况
将给出一个不同的结果,其中
foo
是对
字符串的非空引用
@TrevorTrovalds:Um,ish-尽管我不会为此目的使用它。@Trevor…我挠头试图想象一个场景,在这个场景中,使用
str.toString()抛出NPE
如果str==null要好
检查…@user985358:Trevor,你最近没有接受这个答案和其他答案。这个答案或其他答案有问题吗?或者你有其他原因没有接受这么多答案吗?你好。如果你在解除暂停后没有看到它,这里有来自JohnDoD的评论o乔恩的回答。如果你回来了,请考虑恢复所有未被接受的答案——如果他们当时足够好接受的话,那些有帮助的人会因为他们控制之外的事件而受到惩罚。