toString 是否也要求基元类型?

2022-09-02 02:15:32

我知道每当我们打印一个对象时都会调用它,并且默认情况下,它是在所有类的超类中定义的。toStringJavaObject

但是,我的老师说,当我们打印一些(等)时,也叫它。toStringprimitive typeint, char

这是真的吗?


答案 1

是的,但不是你所期望的。

System.out.println(someInt)

只是一个包装器,这也增加了一行。print

System.out.print(someInt)

调用

String.valueOf(someInt)

这反过来又调用

Integer.toString(someInt)

它是 Integer 类中的一个静态方法它返回一个表示指定整数的 String 对象。此方法与 不同,后者是一种实例方法,它将其 Integer 对象转换为表示其 int 值的字符串。Integer#toString()

someInt.toString()不会工作,因为它不是一个对象,所以不会扩展。someIntObject


答案 2

让我们看看是如何工作的。根据 API 是一个:System.out.print(int)SystemSystem.outPrintStream

public static final PrintStream out

在src中,我们可以看到它如何打印ints:PrintStream

public void print(int i) {
    write(String.valueOf(i));
}

这是来自src:String.valueOf(int)String

public static String valueOf(int i) {
    return Integer.toString(i);
}