【问题标题】:When is toString() method called [duplicate]何时调用 toString() 方法[重复]
【发布时间】:2015-02-17 03:59:20
【问题描述】:

我有一个示例来覆盖 toString() 方法。

import java.util.Scanner; 

public class Demo{ 

    String name = "";
    String age = "";

    Demo(String name, String age){
            this.name = name;
            this.age = age;
        }


    public static void main(String[] args) {  
        Scanner scanner = new Scanner(System.in);  

        System.out.print("Enter the name:");  
        String name = scanner.next();  
        System.out.print("Enter the age:");  
        String age = scanner.next();  

        Demo test = new Demo(name, age);  
        System.out.println(test);  

    }  

    public String toString() {  
        return ("Name=>" + name + " and " + "Age=>" + age);  
    }  
}  

我的疑问是,即使既没有从构造函数也没有从 main 调用 toString() 方法,它如何将 test 打印为 Name=>abc 和 Age=>12?

【问题讨论】:

  • 添加 @Override 注释 - 我不知道这是否会有所帮助,但拥有它是件好事;)

标签: java constructor java.util.scanner tostring


【解决方案1】:

您正在呼叫System.out.println(test),这是对PrintStream.println(Object) 的呼叫。这将通过String.valueOf 对您传入的引用调用toString()

打印一个对象,然后终止该行。此方法首先调用String.valueOf(x) 以获取打印对象的字符串值,然后表现得好像它调用print(String) 然后调用println()

【讨论】:

    【解决方案2】:

    您的 toString() 方法实际上是由 println 方法调用的。顺便说一句,当你覆盖一个方法时,我建议你使用它上面的@Override 符号,这样编译器会检查你是否真的覆盖了一个现有的方法,并且当你回读它时,它也会让你自己和其他人清楚。例如

    @Override
    public void methodToBeOverriden () {}
    

    【讨论】:

      【解决方案3】:

      你打过电话 System.out.println(test); 它的效果就像你在打电话一样

      System.out.println(test.toString());

      【讨论】:

        【解决方案4】:

        当您调用 System.out.println(test) 时,它会使用您传入的对象调用 toString() 方法。由于您已覆盖此方法,因此它正在调用您的 toString() 方法,因此是预期的输出 - Name=>abc and Age=>12

        【讨论】:

          【解决方案5】:

          如果你把对象放在System.out.println 中,这是对toString() 的调用

          Demo test = new Demo(name, age);  
          System.out.println(test); 
          

          来自println(java.lang.Object)

          打印Object,然后终止该行。此方法首先调用String.valueOf(x) 以获取打印对象的字符串值,然后表现得好像它调用print(String) 然后调用println()

          【讨论】:

            猜你喜欢
            • 2012-12-07
            • 1970-01-01
            • 2013-07-12
            • 2020-05-22
            • 1970-01-01
            • 2015-11-01
            • 1970-01-01
            • 2011-01-20
            • 2013-06-02
            相关资源
            最近更新 更多