1024 * 1024 * 1024 * 1024ve 2147483648Java'da aynı değere sahip değildir.
Aslında, Java'da 2147483648 DEĞER DEĞİLDİR (olmasına rağmen 2147483648L). Derleyici tam olarak ne olduğunu veya nasıl kullanılacağını bilmiyor. Yani şaraplar.
1024Java'da geçerli bir int ve geçerli intbaşka bir geçerli ile çarpılır int, her zaman geçerlidir int. Sezgisel olarak beklediğiniz aynı değer olmasa bile, hesaplama taşacak.
Misal
Aşağıdaki kod örneğini düşünün:
public static void main(String[] args) {
int a = 1024;
int b = a * a * a * a;
}
Bunun bir derleme hatası oluşturmasını bekler misiniz? Şimdi biraz daha kayganlaşıyor.
Ya 3 yinelemeli bir döngü koyar ve döngüde çoğalırsak?
Derleyicinin optimizasyonuna izin verilir, ancak programın davranışını değiştiremez.
Bu davanın nasıl ele alındığına dair bazı bilgiler:
Java ve diğer birçok dilde, tamsayılar sabit sayıda bitten oluşur. Verilen bit sayısına uymayan hesaplamalar taşacaktır ; hesaplama temelde Java'da 2 ^ 32 modülüdür , bundan sonra değer işaretli bir tamsayıya dönüştürülür .
Diğer diller veya API'ler dinamik sayıda bit kullanır ( BigIntegerJava'da), bir istisna oluşturur veya değeri sayı değil gibi sihirli bir değere ayarlar.