与Integer.MAX_VALUE和使用System.out.println进行比较时,for循环会提前终止 - java

当我运行此类时,for循环似乎提前终止

class Test {

    public static void main(String[] args) {
        int result = 0;
        int end = Integer.MAX_VALUE;
        int i;
        for (i = 1; i <= end; i += 2) {
            System.out.println(i);
        }
        System.out.println("End:" + i);
    }

}

输出为:

1
3
5
...
31173
31175
End:31177

为什么到此结束?有趣的是,如果我在for循环中删除了System.out.println(i),则输出将为End:-2147483647。显然,i中的值具有wrapped round

我正在使用的Java版本是

Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) 64-Bit Server VM (build 14.2-b01, mixed mode)

参考方案

它是Java 6中的一个已知错误。JIT错误地优化了循环。我相信Java的最新版本没有此错误。

http://vanillajava.blogspot.co.uk/2011/05/when-jit-gets-it-wrong.html

Java 6更新16已有两年多了。如果您无法更新到Java 7,建议您更新到最新版本的Java 6 update 25。

BTW Java 6将在几个月后终止免费支持(2012年12月)

如何使用system.out.println从void方法填充Jtextarea? - java

我正在使用具有public void方法init()和System.out.println()的库。在我的实现中,我只能访问无效的方法init(),但无法将sout的输出获取到我的gui组件JTextarea。是否可以捕获它(使用InputStream或其他方式)?任何帮助表示赞赏。谢谢 参考方案 假设您无权访问该库并且可以更改它(对于GUI应用程序,我有点…

在小数点后三位显示秒。 -Java - java

我在Java程序中使用毫秒,并将其转换为秒。我的方法执行完此操作后,它将以长格式返回秒。System.out.println("[" + threadID + "]" + " " + "SeqSum res=" + grandTotal + " secs=" …

System.out.println-此方法是否在Java中链接? - java

我想知道下面的Java代码:“ System.out.println”。我对此是正确的:“系统”是静态类。 “ .out”是“系统”类的方法。这是我对“ .println”有点困惑的地方-这是一个什么类/对象的方法?另外,这个概念被称为“方法链接”吗?谢谢GF 参考方案 不,这不是方法链接。您正确地认为System是一个类(只是一个常规类,不是“静态”,只有…

字符串内存分配 - java

哪一个更好System.out.println("hello world"); 要么String s="hello world"; System.out.println(s); 参考方案 对于此简单示例,在内存分配方面没有区别。

System.out.printf不打印整数参数 - java

我是Java编程的新手,无法从另一个类返回方法。这两个类都可以编译并成功运行。我可以从一个类中调用一个简单的int,但是当我想计算用户输入的两个输入整数时,我只会得到一个空格。这是我的计算课class calculations { public final int AGE = 53; public int numbers(int num1, int num2…