Рассмотрим ниже:
Object nothingToHold = null;
System.out.println(nothingToHold); // Safely prints 'null'
Здесь Sysout должен ожидать String. Поэтому toString() должен быть вызван на экземпляр.
Итак, почему null.toString() работает потрясающе? Sysout заботится об этом?
EDIT: На самом деле я увидел эту странную вещь с append() StringBuilder. Так что попробовал с Sysout. Оба ведут себя одинаково. Так и этот метод заботится?