Java 字符串';s toString()方法有什么实际用途吗?
我在看书,注意到了。我从来没有想象过。说明: 这个对象(已经是字符串!)本身被返回 除了填充约定或使用计算资源外,Java中的Java 字符串';s toString()方法有什么实际用途吗?,java,string,tostring,Java,String,Tostring,我在看书,注意到了。我从来没有想象过。说明: 这个对象(已经是字符串!)本身被返回 除了填充约定或使用计算资源外,Java中的.toString()对字符串做了哪些使用字符串本身不会做的事情?为什么它不直接从类java.lang.Object继承.toString() 编辑: 我知道在多态性的情况下,必须存在自己的toString()方法,因为它覆盖了其父级的toString()。在第一个问题中,我想知道的是,在使用stringVariable/“String value”和使用stringVa
.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
方法来完成的。当我们需要对象的字符串表示时,可以使用javatoString()
方法。它在对象
类中定义。可以重写此方法以自定义对象的字符串
表示形式
实用示例:
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乔恩的回答。如果你回来了,请考虑恢复所有未被接受的答案——如果他们当时足够好接受的话,那些有帮助的人会因为他们控制之外的事件而受到惩罚。