java вывод объекта в консоль

176
09 июля 2018, 08:10
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"?

Answer 1

Вот эта строка

System.out.println(value1);

эквивалентна следующей

System.out.println(value1.toString());

то есть будет вызван метод toString() (он определен в классе Object). В Вашем классе BoxPrinter этот метод переопределен:

public String toString() {
    return "{" + val + "}";
}

Из-за этого в консоле Вы получаете 10 и "Hello World" вместо стандартного BoxPrinter@1540e19d.

Answer 2

Компилятор сделает эту строку:

System.out.println(value1);

В эту:

System.out.println(value1.toString());

Если метод toString() не определен то будет использоваться метод из класса Object, который определяется так:

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

Это обозначает, что сначала будет выведено расположение класса, собачка и хэш-код объекта.

READ ALSO
Ищу online курсы по Java

Ищу online курсы по Java

Посоветуйтепожалуйста хорошие online курсы по Java, котррые выдают сертификат об окончании

206
Создание csv-файла

Создание csv-файла

Дорогие друзья! Мне надо создать программу, которая будет считывать данные из txt-файла и записывать в csv(csv-файл она также создаёт сама)Я понимаю,...

176
java.util.InputMismatchException

java.util.InputMismatchException

Помогите разобраться, я новичокОшибка:

187
Как узнать все вхождения символа в строке в Java?

Как узнать все вхождения символа в строке в Java?

Например, имеем строку "кровоточивость", и нужно узнать индекс каждой буквы "о",как это сделать,не переводя строку в массив?

192