Чем обусловлен безусловный вызов метода 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
- нет.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Тестирую метод логина в Spring SecurityХочу получить статус 200, но приходит 401
У меня есть BusActivity, в которой я уже знаю значение переменной positionУ нее есть дочерний фрагмент BusStopFragment, который я создаю в методе SetupViewPager()
Делаю регистрацию юзераДлина пароля должна быть от 6 до 16 символов