[英]Why is comparing ints safe in Java?
鑒於以下原因:
int a = ..., b = ... ;
這是不安全的:
a - b
但這很安全:
a > b
安全起見,我保證不會受到溢出的影響(我正在寫一個Int Comparator
)。
比較a > b
本身是安全的,因為a
和b
都沒有改變。 操作a - b
可能是不安全的,因為可能會發生溢出。
但是,先前的溢出可能會影響稍后進行的比較a > b
的正確性。 減去一個很大的負數會導致溢出,因為結果可能小於原始數(在數學上,減去負數會增加原始數),這意味着a > b
可能是意外結果。
如果在Comparator
器中使用a - b
,則乍一看它滿足Comparator
的約定:如果該值小於,等於或大於,則返回一個小於零,等於零或大於零的數字。另一個價值。 但這只有在不發生溢出的情況下才是正確的。
如果a = 1000
和b = 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.