Put simply, the main difference is in format string:
-
MessageFormat.format()
format string accepts argument positions (eg.{0}
,{1}
). Example:"This is year {0}!"
The developer doesn’t have to worry about argument types, because they are, most often, recognized and formated according to current
Locale
. -
String.format()
format string accepts argument type specifiers (eg.%d
for numbers,%s
for strings). Example:"This is year %d!"
String.format()
generally gives you much more control over how the argument is displayed thanks to many options you can specify with the type specifier. For instance, format string"%-6.2f"
specifies to display a left-aligned floating point number with min. width 6 chars and precision of 2 decimal places.
Just have a look at javadoc of both methods to find out more details.