我在Java 11中遇到了一个奇怪的问题,我正在移植一个庞大的项目,并且有一些测试使用DecimalFormat失败了,但是在Java 8上没有失败。
Java 11中的DecimalFormat给我一个逗号作为小数分隔符,而在Java 8中它给我一个点。
这里是一个最小可重现的示例:
import java.text.DecimalFormat;
public class Test {
public static void main(String[] args) {
DecimalFormat format = new DecimalFormat("#0.00");
System.out.println(format.format(1.02));
}
}
在Java 8上输出1.02
,在Java 11上输出1,02
。
下面是使用两个版本构建和运行示例的完整终端会话:
~ » sdk use java 8.0.282.hs-adpt
Using java version 8.0.282.hs-adpt in this shell.
~ » javac -version
javac 1.8.0_282
~ » javac Test.java
~ » java -version
openjdk version "1.8.0_282"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_282-b08)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.282-b08, mixed mode)
~ » java Test
1.02
~ » sdk use java 11.0.10.hs-adpt
Using java version 11.0.10.hs-adpt in this shell.
~ » javac -version
javac 11.0.10
~ » javac Test.java
~ » java -version
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.10+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.10+9, mixed mode)
~ » java Test
1,02
有人遇到了类似的问题吗?在Java 8和11之间是否对相关类进行了任何更改,导致出现这种情况?