Всякий раз, когда вы получаете доступ к объекту (не являющемуся String) в контексте String, то toString () вызывается под обложками компилятором.
Вот почему
Map map = new HashMap();
System.out.println("map=" + map);
, и переопределяя стандарт toString () из Object в ваших собственных классах, вы можете сделать ваши объекты полезными и в контекстах String.
(и считайте это черным ящиком! Никогда, никогда не используйте содержание для чего-либо еще, чем представление человеку)