java - 有人可以解释在 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
对象的实际文本内容。这意味着当你给它 a 时String
,它会打印字符串的文本("Mango"
而不是类似的java.lang.String@ab2323
)。只有当你给它一个非String
Object 时,它才会调用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
. 结束。
推荐阅读
- angular - 角度反应形式 - 以编程方式将输入元素绑定到反应形式
- react-native - onPanResponderRelease 后,自动动画移动无法正常工作
- apache - Apache 无法启动。设置虚拟主机。MAMP
- android - 如何使用 listview 获取从 getItemAtPosition 中选择的 id
- matlab - Best approach to speed up pixel processing in matlab
- python - Is there a way of addressing all the inputs in a program?
- android - Continually Running Background Service
- bash - Fill empty fields - awk
- android - Load a single field of the object in realm
- angular - Firefox 控制台中的异常跟踪不使用源映射