At https://docs.oracle.com/javase/tutorial/i18n/text/usage.html I found this:
// recommended
System.out.printf("Character %c is invalid.%n", codePoint);
// not recommended
System.out.println("Character " + String.valueOf(char) + " is invalid.");
Why is one recommend and why the other is not?
UPDATE
The arguments provided by the documentation have not much meaning for me excepting the localization one:
This following approach is simple and avoids concatenation, which makes the text more difficult to localize as not all languages insert numeric values into a string in the same order as English.