1024 * 1024 * 1024 * 1024dan 2147483648tidak memiliki nilai yang sama di Jawa.
Sebenarnya, 2147483648 BUKAN BAHKAN NILAI (walaupun 2147483648L) di Jawa. Kompiler benar-benar tidak tahu apa itu, atau bagaimana menggunakannya. Jadi itu merengek.
1024 adalah int yang valid di Java, dan valid int dikalikan dengan valid lain int, selalu valid int. Bahkan jika itu bukan nilai yang sama yang Anda harapkan secara intuitif karena perhitungannya akan meluap.
Contoh
Pertimbangkan contoh kode berikut:
public static void main(String[] args) {
int a = 1024;
int b = a * a * a * a;
}
Apakah Anda berharap ini menghasilkan kesalahan kompilasi? Itu menjadi sedikit lebih licin sekarang.
Bagaimana jika kita meletakkan satu loop dengan 3 iterasi dan dikalikan dalam loop?
Kompiler diizinkan untuk mengoptimalkan, tetapi tidak dapat mengubah perilaku program saat melakukannya.
Beberapa info tentang bagaimana kasus ini ditangani:
Di Jawa dan banyak bahasa lainnya, integer akan terdiri dari jumlah bit yang tetap. Perhitungan yang tidak sesuai dengan jumlah bit yang diberikan akan melimpah ; perhitungan pada dasarnya dilakukan modulus 2 ^ 32 di Jawa, setelah itu nilai diubah kembali menjadi bilangan bulat yang ditandatangani .
Bahasa atau API lain menggunakan jumlah bit dinamis ( BigIntegerdi Jawa), naikkan pengecualian atau setel nilai ke nilai ajaib seperti bukan-angka-.