Mengapa Operasi Pendaraban Menghasilkan Keputusan yang Berbeza?
Dalam kod yang disediakan, perbezaan dalam keputusan timbul disebabkan kehadiran atau ketiadaan huruf "L" dilampirkan pada literal integer. Untuk memahami percanggahan ini, adalah penting untuk menyelidiki jenis data yang terlibat:
long oneYearWithL = 1000*60*60*24*365L; long oneYearWithoutL = 1000*60*60*24*365;
Nilai yang diberikan kepada oneYearWithL ialah panjang, ditunjukkan oleh akhiran "L". Panjang boleh mewakili julat nilai yang lebih besar berbanding dengan integer. Dalam kes ini, 365 dianggap panjang, dan hasil pendarabannya dengan nilai integer sebelumnya juga panjang.
Sebaliknya, oneYearWithoutL diberikan nilai integer. Mendarab nilai integer menghasilkan integer. Walau bagaimanapun, nilai ungkapan ini melebihi had integer maksimum 32-bit (2^31 - 1). Oleh itu, semasa penugasan, ia dipotong untuk dimuatkan dalam julat integer yang sah, membawa kepada pengiraan yang salah.
Untuk menggambarkan perkara ini dengan lebih lanjut, pertimbangkan output berikut:
System.out.println(1000*60*60*24*365L); System.out.println(1000*60*60*24*365); System.out.println(Integer.MAX_VALUE);
Output:
31536000000 1471228928 2147483647
Ini menunjukkan bahawa apabila "L" dimasukkan, hasilnya berada dalam julat jenis data yang panjang dan oleh itu tepat. Tetapi apabila "L" diabaikan, hasilnya dipotong kepada integer, mengakibatkan nilai yang salah.
Untuk membetulkan isu ini dan mendapatkan hasil yang betul, ungkapan pendaraban dalam oneYearWithoutL sama ada harus dibuang secara eksplisit ke penggunaan panjang (panjang) atau literal angka harus ditambah akhiran "L", seperti oneYearWithoutL = 1000*60*60*24*365L.
Atas ialah kandungan terperinci Mengapa Menambah 'L' pada Integer Mengubah Keputusan Pendaraban?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!