Подтвердить что ты не робот

Является ли toString также для примитивных типов?

Я знаю, что toString вызывается в Java всякий раз, когда мы печатаем объект, и это по умолчанию определено в классе Object, который является суперклассом всех классов.

Но мои преподаватели говорят, что toString также вызывается, когда мы печатаем некоторые primitive type (int, char и т.д.).

Это правда?

4b9b3361

Ответ 1

Да, но не в том смысле, что вы ожидаете, что это будет.

System.out.println(someInt)

является просто оболочкой для print, которая также добавляет строку.

System.out.print(someInt)

вызывает

String.valueOf(someInt)

который, в свою очередь, вызывает

Integer.toString(someInt)

который статический метод в классе Integer, который возвращает a String, представляющий указанное целое число. Этот метод не совпадает с Integer#toString(), методом экземпляра, который преобразует его объект Integer в строку, представляющую ее значение int.

someInt.toString() не будет работать, поскольку someInt не расширяет Object из-за того, что он не является объектом.

Ответ 2

Давайте посмотрим, как работает System.out.print(int). Согласно System API System.out есть PrintStream:

public static final PrintStream out

В PrintStream src мы видим, как он печатает ints:

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

И это String.valueOf(int) из String src:

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

Ответ 3

Если вы рассматриваете следующий код

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));
}

и теперь, если вы видите функцию valueOf() в классе String

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

и

Integer.toString(i) - это то, что ваш учитель имел в виду, вызывая метод toString().

Ответ 4

Примитивы autoboxed к их соответствующему типу объекта. Итак, toString() вызовет.