首页 > 解决方案 > 有人可以解释在 String 类中被覆盖的 toString 方法的源代码吗?

问题描述

我有几个问题,如果有人回答它会很有帮助。

  1. 以下代码中的 toString() 方法返回什么?

    /** 
    * This object (which is already a string!) is itself returned. 
    * 
    * @return the string itself.
    */ 
    public String toString() {
    return this; 
    }
    

如您所见,上面的方法返回this意味着返回了调用它的对象的引用,然后如果我们打印一个 String 对象,则自动调用 toString() 方法并将引用返回给 println() 方法,但我们将输出作为值(芒果)而不是参考(假设内存地址为 dtt22723836@dtf)。

如果 返回(参考),则输出应如下

String a="Mango";
System.out.println(a);
/* Actual output : Mango
My assumption :dtt22723836@dtf (as the reference is returned from toString() 
to println()
 */
  1. 什么存储在字符串的引用变量中?价值(芒果)还是参考(dtt22723836@dtf)?

如我错了请纠正我。谢谢你。

标签: javastringobjectreferencetostring

解决方案


你似乎从一个奇怪的角度看它。您需要从一个事实开始:System.out.println() 知道如何显示String对象的实际文本内容。这意味着当你给它 a 时String,它会打印字符串的文本("Mango"而不是类似的java.lang.String@ab2323)。只有当你给它一个非StringObject 时,它才会调用toString()方法(通过String.valueOf()- 虽然valueOf似乎甚至在 中被调用println(String),据说也是为了处理空值)。

文本"dtt22723836@dtf"通常是由实现的方法String创建的对象(而不是在子类中覆盖) -调用此方法以获取要打印的字符串。toString()java.lang.Objectprintln()

现在,String a = "Mango" 已经是一个String,意味着System.out.println(a)知道如何打印文本内容,Mango而不是java.lang.Object.toString()默认实现的任何制造。

这就是为什么java.lang.String.toString()只返回调用该toString()方法的对象的原因。它已经是一个String对象,当它返回时,它会println()以可预测的方式使用。

java.lang.String.toString()没有什么要计算的,对象本身就是一个String. 结束


推荐阅读