-
Bug
-
Resolution: Fixed
-
P3
-
8u66, 9
-
b122
-
x86_64
-
windows_7
-
Verified
FULL PRODUCT VERSION :
A DESCRIPTION OF THE PROBLEM :
String formatter methods in different classes in java.lang, java.util, and java.io packages behave differently when
(a) Locale.getDefault() and
(b) Locale.getDefault(Locale.Category.FORMAT)
differ.
java.util.Formatter uses (b) by default, which seems to be correct. However, java.lang.String and java.io.PrintStream use Formatter differently in their format(String format, Object... args) methods.
1. In String class, the default constructor of Formatter is applied, so (b) is used, but the API doc of String.format() incorrectly states that (a) is used.
2. In PrintStream class, however, (a) is used and the API doc also says that (a) is used.
As a consequence, these methods may behave differently. I think, they all should use (b) and all API docs should be adjusted.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Execute the following code snippet.
Locale.setDefault(Locale.ENGLISH);
Locale.setDefault(Category.FORMAT, Locale.FRENCH);
System.out.print(String.format("%f\n", 3.14));
System.out.printf("%f\n", 3.14);
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
3,140000
3,140000
ACTUAL -
3,140000
3.140000
REPRODUCIBILITY :
This bug can be reproduced always.
A DESCRIPTION OF THE PROBLEM :
String formatter methods in different classes in java.lang, java.util, and java.io packages behave differently when
(a) Locale.getDefault() and
(b) Locale.getDefault(Locale.Category.FORMAT)
differ.
java.util.Formatter uses (b) by default, which seems to be correct. However, java.lang.String and java.io.PrintStream use Formatter differently in their format(String format, Object... args) methods.
1. In String class, the default constructor of Formatter is applied, so (b) is used, but the API doc of String.format() incorrectly states that (a) is used.
2. In PrintStream class, however, (a) is used and the API doc also says that (a) is used.
As a consequence, these methods may behave differently. I think, they all should use (b) and all API docs should be adjusted.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Execute the following code snippet.
Locale.setDefault(Locale.ENGLISH);
Locale.setDefault(Category.FORMAT, Locale.FRENCH);
System.out.print(String.format("%f\n", 3.14));
System.out.printf("%f\n", 3.14);
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
3,140000
3,140000
ACTUAL -
3,140000
3.140000
REPRODUCIBILITY :
This bug can be reproduced always.
- relates to
-
JDK-8159548 Formatter returns unexpected strings if locale is null.
-
- Closed
-