2012-10-09 13 views
8

kullanırken geçerli:Integer.MAX_VALUE karşılaştırarak ve System.out.println

1 
3 
5 
... 
31173 
31175 
End:31177 

Neden orada bitiyor mu? İlginç olarak, for döngüsünde System.out.println(i)'u kaldırırsam, çıktı End:-2147483647 olur. Açıkça, i'daki değerin wrapped round vardır. Ben kullanıyorum

Java versiyonu

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

Yazdırmayı deneyin Integer.MAX_VALUE –

+0

Böyle bir çıktı elde edemiyorum. Tamponun dolu ya da bir şey gibi görünüyor. –

+2

Kod hiç yazdırılmamalı, bu da bir hata (biraz farklı bir tane de olsa), yazdığınız döngü sonsuzdur, her zaman olacağım <= Tamsayı.MAX_VALUE. – user439407

cevap

15

Onun JIT hatalı döngü optimize Java 6. bilinen bir hatadır. Daha yeni Java sürümlerinin bu hataya sahip olmadığına inanıyorum.

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

Java 6 update 16 sadece iki yaşında. Ben erişebilmek için birkaç ay içinde 7.

BTW Java 6 olacak Java (2012 Ara) Ücretsiz Destek End Of güncelleme ulaşamaması durumunda

+0

Harika bir kaynak. +1 –

+0

Şerefe :) ..... –

+0

Çok ilginç. Bu anormal davranışın temel nedenini tam olarak bilmediğim dışında, benzer bir bulguyu yayınlamak üzereydim. –

1

güncelleme 25 son sürüme Java 6 güncellemek önermek Integer.MAX_VALUE-1 kullanarak JVM hata çevresinde çalışın.

İlgili konular