簡體   English   中英

為什么在Java中比較ints是安全的?

[英]Why is comparing ints safe in Java?

鑒於以下原因:

int a = ..., b = ... ;

這是不安全的:

a - b

但這很安全:

a > b

安全起見,我保證不會受到溢出的影響(我正在寫一個Int Comparator )。

比較a > b本身是安全的,因為ab都沒有改變。 操作a - b可能是不安全的,因為可能會發生溢出。

但是,先前的溢出可能會影響稍后進行的比較a > b的正確性。 減去一個很大的負數會導致溢出,因為結果可能小於原始數(在數學上,減去負數會增加原始數),這意味着a > b可能是意外結果。

如果在Comparator器中使用a - b ,則乍一看它滿足Comparator的約定:如果該值小於,等於或大於,則返回一個小於零,等於零或大於零的數字。另一個價值。 但這只有在不發生溢出的情況下才是正確的。

如果a = 1000b = Integer.MIN_VALUE + 100 (一個非常大的負數-2147483548 ),則a - b將溢出。 真正的數學結果將是500 - Integer.MIN_VALUE ,該值大於Integer.MAX_VALUE (2147484548)。 因此,正的返回值將指示a > b ,這顯然是正確的。

但是在發生溢出時,值結束時小於零( -2147482748 ),錯誤地指示a < b

好吧,這取決於...請參閱System.nanoTime() ,建議將t1 - t0 < 0, not t1 < t0進行時間比較...

暫無
暫無

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

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