我知道每当我们打印一个对象时toString
都会调用Java
,默认情况下在Object
类中定义,这是所有类的超类。
但是,我的老师说,当我们打印一些toString
(primitive type
等)时,也会调用int, char
。
这是真的吗?
答案 0 :(得分:49)
是的,但不是你期望它的意义。
System.out.println(someInt)
只是print
的包装器,它还添加了一行。
System.out.print(someInt)
String.valueOf(someInt)
反过来calls
Integer.toString(someInt)
在a static method的Integer类中为returns a String
object representing the specified integer。此方法不与Integer#toString()
相同,someInt.toString()
是将其Integer对象转换为表示其int值的字符串的实例方法。
someInt
无法正常工作,因为Object
不会延伸{{1}},因为它不是对象。
答案 1 :(得分:1)
如果您考虑使用以下代码
System.out.println(5);
以下事情将会发生
public void println(int x) {
synchronized (this) {
print(x);
newLine();
}
}
来自PrintStream
类的函数将被调用,内部将调用print(x)
函数,如下所示 -
public void print(int i) {
write(String.valueOf(i));
}
现在如果你在String类
中看到valueOf()函数public static String valueOf(int i) {
return Integer.toString(i);
}
和
Integer.toString(i)
是您的老师通过调用toString()方法的意思。
答案 2 :(得分:0)
基元自动装箱到各自的对象类型。因此toString()
会致电。