我有几个问题,如果有人回答会很有帮助。
下面代码中的 toString() 方法返回什么?
/** * This object (which is already a string!) is itself returned. * * @return the string itself. */ public String toString() { return this; }
如你所见,上面的方法返回this,这意味着返回了调用它的对象的引用,那么如果我们打印一个String对象,就会自动调用toString()方法并且引用返回给 println() 方法,但我们得到的输出是 value(Mango) 而不是引用(假设内存地址是 dtt22723836@dtf)。
如果返回this(引用),那么输出应该如下
String a="Mango";
System.out.println(a);
/* Actual output : Mango
My assumption :dtt22723836@dtf (as the reference is returned from toString()
to println()
*/
- String 的引用变量中存储了什么?值(value)(芒果)还是引用(dtt22723836@dtf)?
如果我错了,请纠正我。 谢谢。
最佳答案
你似乎从一个奇怪的角度看它。您需要从一个事实开始: System.out.println()
知道如何 显示 String
对象的实际文本内容.
这意味着当你给它一个 String
时,它会打印一个字符串的文本 ("Mango"
,而不是像 java.lang.String@ ab2323
)。只有当你给它一个非 String
对象时,它才会调用 toString()
方法(通过 String.valueOf()
- 尽管 >valueOf
似乎甚至在 println(String)
中也被调用,据说也是为了处理空值)。
文本 "dtt22723836@dtf"
通常是 java 中实现的
(在子类中不被覆盖)- toString()
方法创建的 String
对象。 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
。 末日。
关于java - 有人可以解释在 String 类中被覆盖的 toString 方法的源代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67646501/