java - 有人可以解释在 String 类中被覆盖的 toString 方法的源代码吗?

标签 java string object reference 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() 方法,但我们得到的输出是 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()
 */
  1. 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.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末日

关于java - 有人可以解释在 String 类中被覆盖的 toString 方法的源代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67646501/

相关文章:

java - 为什么插入 ArrayList 后行会重复?

javascript - 有没有办法在警报框中显示对象的输入值?

java - JSP:如何捕获另一个页面上的超链接文本

java - 如何在java类中使用logback为特定类和方法实现不同的记录器模式?

java - 如何使用java用字符串中的空格替换(和)括号

c++ - C++ hex2bin 缺少标点符号

mysql - 如何在 mysql 列中查找和替换单词?

ruby - 是否可以更改 Ruby 对象的类?

css - 通过 <object> 包含的 HTML/CSS 未正确显示

java - 基于java中的动态串行有序输入流对数据进行排序和分区