Java 不调用方法打印

Java 不调用方法打印,java,object,inheritance,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 to

这似乎是一个非常基本的问题,但我不明白为什么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);

}

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

因此,整个流程如下所示:

System.out.println(myCar)
String.valueOf(myCar)
myCar.toString()
隐式调用
String.valueOf(Object)
方法,请参见
println(Object x)

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

以及
String.valueOf(Object obj)

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


因为没有
System.out.println(Car)
方法,所以Java编译器会选择最接近的匹配项,即。这将调用您传入的内容,以获取要打印的字符串版本
String.valueOf
使用对象的
toString
方法获取字符串。根据其文件:

返回:

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


它总是调用toString方法吗?这就是我不理解的,它总是在任何对象上调用toString方法。如果您不重写它,它将调用默认的toString方法。@JoeVanjik值得一提的是,只要参数不是
null