首页 > 解决方案 > String.format("%.1g", 0.0f) 导致索引异常,是bug吗?

问题描述

下面的 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)

标签: javastring

解决方案


这是 JDK 中的一个错误,现已修复。

https://bugs.java.com/bugdatabase/view_bug.do?bug_id=7088271

“这两种情况下的问题都是由于当要格式化的值为零时指定的精度为 0 或 1,从而导致 Formatter.addZeros() 中出现 AIOOBE。”


推荐阅读