Java 不调用方法打印
这似乎是一个非常基本的问题,但我不明白为什么toString方法会在屏幕上打印出来,而我甚至没有调用它,我只是实例化了一个Car对象。谢谢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
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