簡體   English   中英

Java的奇怪行為

[英]strange behaviour of the java

你好,我對Java有疑問,為什么以下代碼返回奇怪的值?

System.out.println("Strange " + (20 * 232792560)/20);

為什么我會收到18044195

因為(20 * 232792560)溢出了一個int的范圍,並且將數字范圍環繞數次而變成360883904 然后將其除以20即可得到所看到的結果。

如果想要正確的結果,則需要執行以下操作:

System.out.println("Strange " + (20 * 232792560L) / 20);

(用L標記文字,這意味着常量數學將使用long而不是int ,因此不會再溢出。)

由於(20 * 232792560)將執行基於整數的乘法,並且結果顯然超出int的范圍,因此該值將被截斷。

因為20 * 232792560不適合4個字節(整數值)。

所以你得到:

20 * 232792560 = 360883904; // because of int overflow
360883904 / 20 = 18044195; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM