Чем обусловлен безусловный вызов метода toString() в данном случае? И почему не происходит безусловного вызова второго метода?
class AnyClass{
private Object obj;
public AnyClass(Object cif){
obj = cif;
}
public String toString(){
return obj.toString();
}
public String str(){
return obj.toString();
}
}
class AnonymClasses {
public static void main(String[] args) {
AnyClass ac = new AnyClass(new Integer(10));
System.out.println(ac);
}
}
Системный метод println()
(вывести в поток вывода, обычно на экран) вызывает метод toString()
всякий раз, когда в качестве аргумента получает какой-либо объект, так заложено в его коде.
Так как объект может иметь самую разную реализацию, то для того, чтобы его гарантировано можно было "напечатать" в классе Object
определен метод toString()
, который по умолчанию выводит имя объекта и еще сопутствующую информацию.
Метод println()
не может знать "вид" произвольного объекта и чтобы отобразить его, обращается к методу toString()
, который обязательно присутствует в любом объекте и возвращает строку, которую можно напечатать.
Даже если вы не переопределите в своем классе метод toString()
будет использован метод класса Object
Вам самому не нужно вызывать этот метод, это делает системный метод печати, чтобы гарантировано получить ожидаемый результат.
Ваши собственные методы не будут вызываться системными методами, потому что они о них ничего не знают, что бы вы там не написали.
Просто смотрим реализации
public void print(Object obj) {
write(String.valueOf(obj));
}
Спускаемся ниже
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
Ну как бы всё.
toString()
- стандартный метод в классе Object
, str
- нет.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Тестирую метод логина в Spring SecurityХочу получить статус 200, но приходит 401
У меня есть BusActivity, в которой я уже знаю значение переменной positionУ нее есть дочерний фрагмент BusStopFragment, который я создаю в методе SetupViewPager()
Делаю регистрацию юзераДлина пароля должна быть от 6 до 16 символов