什么时候调用toString()方法

时间:2014-12-18 11:18:09

标签: java constructor java.util.scanner tostring

我有一个例子来覆盖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()方法,它如何打印测试为Name => abc和Age => 12?

5 个答案:

答案 0 :(得分:9)

您正在呼叫System.out.println(test),这是对PrintStream.println(Object)的呼叫。这将通过toString()

在您传入的参考上调用String.valueOf
  

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

答案 1 :(得分:2)

您的toString()方法实际上是由println方法调用的。顺便说一下,当你重写一个方法时,我建议你在它上面使用@Override表示法,这样编译器就会检查你是否实际上覆盖了现有的方法,并且当你通过它回读它时,它也会让你和其他人保持清晰。 e.g。

@Override
public void methodToBeOverriden () {}

答案 2 :(得分:1)

你打过电话了 的的System.out.println(测试); 它的效果就像你在呼唤

<强>的System.out.println(test.toString());

答案 3 :(得分:0)

如果您将对象放在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()

答案 4 :(得分:0)

当您致电System.out.println(test)时,它会使用您传入的对象调用toString()方法。当您重写此方法时,它会调用您的toString()方法,因此预期输出 - Name=>abc and Age=>12