无需调用即可打印

时间:2018-08-29 17:20:11

标签: java object inheritance

这似乎是一个非常基本的问题,但是我什至不理解为什么我什至没有实例化为什么toString方法在屏幕上打印时,我才实例化了一个Car对象。谢谢

public class Car {

    public void m1() { 

       System.out.println("car 1"); 

    }

    public void m2() { 

       System.out.println("car 2"); 

    }

    public String toString() { 

       return "vroom"; 

    }

 }




public static void main(String[] args) {

    Car myCar = new Car();

    System.out.println(myCar);

}

3 个答案:

答案 0 :(得分:1)

String.valueOf(Object)方法被隐式调用,请参见println(Object x)的{​​{3}}:

  

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

String.valueOf(Object obj)中的doc

  

如果参数为null,则为等于“ null”的字符串;否则,   返回obj.toString()的值。

答案 1 :(得分:0)

此行System.out.println(myCar)在内部调用toSring方法,因为println 首先调用String.valueOf(myCar)来获取打印对象的字符串值。如果myCar.toString()不是myCar,则valueOf使用null

所以整个流程是这样的:

System.out.println(myCar) > String.valueOf(myCar) > myCar.toString()

答案 2 :(得分:0)

由于没有std::list::iterator方法,因此Java编译器会选择最接近的匹配项,即System.out.println(Object)。这会在您传递的内容上调用String.valueOf,以获取要打印的字符串版本。 System.out.println(Car)使用对象的String.valueOf方法获取字符串。从其文档中:

  

返回:

     

如果参数为toString,则字符串等于null;否则,将返回"null"的值。