有人可以解释在String类中重写的toString方法的源代码吗?
我有几个问题,如果有人回答会很有帮助。
-
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()
*/
- 什么存储在字符串的引用变量中?价值(芒果)或参考(dtt22723836@dtf)?
如果我错了纠正我。谢谢你。
回答
你似乎从一个奇怪的角度看它。您需要从一个事实开始:System.out.println() 知道如何显示String对象的实际文本内容。这意味着当你给它一个 时String,它会打印一个字符串的文本("Mango"而不是像java.lang.String@ab2323)。只有当你给它一个非String对象时它才会调用toString()方法(通过String.valueOf()- 尽管valueOf似乎甚至在 中被调用println(String),据说也可以处理空值)。
文本"dtt22723836@dtf"通常是String由在中toString()实现的方法创建的对象java.lang.Object(而不是在子类中覆盖) -println()调用此方法以获取要打印的字符串。
现在,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. 结束。