以下Java代码崩溃。我的jdk版本是1.7.0_51。是一个错误吗?
package testJava;
public class Test2 {
public static void main(String[] args) {
String.format("%.1g", 0.0f);
}
}
调用堆栈:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException
at java.lang.System.arraycopy(Native Method)
at java.util.Formatter$FormatSpecifier.addZeros(Unknown Source)
at java.util.Formatter$FormatSpecifier.print(Unknown Source)
at java.util.Formatter$FormatSpecifier.print(Unknown Source)
at java.util.Formatter$FormatSpecifier.print(Unknown Source)
at java.util.Formatter$FormatSpecifier.printFloat(Unknown Source)
at java.util.Formatter$FormatSpecifier.print(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.lang.String.format(Unknown Source)
at testJava.Test2.main(Test2.java:6)
答案 0 :(得分:2)
这是JDK中的错误,现已修复。
https://bugs.java.com/bugdatabase/view_bug.do?bug_id=7088271
“两种情况下的问题都是由于当要格式化的值为零时指定的精度为0或1,从而导致Formatter.addZeros()中出现AIOOBE。”
答案 1 :(得分:1)
这是Java 8中修复的JDK bug。