class BoxPrinter<T> {
private T val;
public BoxPrinter(T arg) {
val = arg;
}
public String toString() {
return "{" + val + "}";
}
public T getValue() {
return val;
}
}
class B {
public static void main(String[] args) {
BoxPrinter<Integer> value1 = new BoxPrinter<Integer>(new Integer(10));
//////////тут///
System.out.println(value1);
////////////////
Integer intValue1 = value1.getValue();
BoxPrinter<String> value2 = new BoxPrinter<String>("Hello world");
///////////и тут////
System.out.println(value2);
///////////////////
}
}
В код особо не вдавайтесь скопипастил с сайта.Вопрос:почему помеченные строки println
не выводят, как обычно, при попытке напечатать в консоль объект, что то вроде "BoxPrinter@1540e19d", а печатают "10" и "Hello World"?
Вот эта строка
System.out.println(value1);
эквивалентна следующей
System.out.println(value1.toString());
то есть будет вызван метод toString()
(он определен в классе Object
). В Вашем классе BoxPrinter
этот метод переопределен:
public String toString() {
return "{" + val + "}";
}
Из-за этого в консоле Вы получаете 10 и "Hello World" вместо стандартного BoxPrinter@1540e19d.
Компилятор сделает эту строку:
System.out.println(value1);
В эту:
System.out.println(value1.toString());
Если метод toString() не определен то будет использоваться метод из класса Object, который определяется так:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
Это обозначает, что сначала будет выведено расположение класса, собачка и хэш-код объекта.
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Посоветуйтепожалуйста хорошие online курсы по Java, котррые выдают сертификат об окончании
Дорогие друзья! Мне надо создать программу, которая будет считывать данные из txt-файла и записывать в csv(csv-файл она также создаёт сама)Я понимаю,...
Например, имеем строку "кровоточивость", и нужно узнать индекс каждой буквы "о",как это сделать,не переводя строку в массив?