Существует ли логическое объяснение типа языка для следующего поведения (Java 7 и я подозреваю, что и предыдущие версии):
Object a = null;
String as = String.valueOf(a); // as is assigned "null"
System.out.println(as+":"+as.length()); // prints: "null:4"
System.out.println ( String.valueOf(null)); // NPE