Sonar檢測Math.abs(new Random().nextInt()) “Use the original value instead”


今天早上旁邊同事喊我看一個Sonar檢測出的問題:
Sonar檢測問題
當時看了好幾眼沒覺得這個有太大問題,於是又看了下Sonar建議:
Sonar建議
這是說Math.abs()方法使用在數字上面可能返回最小值,覺得這個挺有意思的,於是Google一下:

Oracle docs: Integer Operations中有這么一段話:

The integer operators do not indicate overflow or underflow in any way.

整數的操作不會告訴我們向上溢出還是向下溢出。
所以,溢出的結果已由語言指定,獨立於JVM版本,Integer.MAX_VALUE + 1 == Integer.MIN_VALUE 和 Integer.MIN_VALUE - 1 == Integer. MAX_VALUE。其他整數類型也是如此。

原子整形對象 (AtomicInteger, AtomicLong, etc.) 內部使用正常的整形去操作,所有類似getAndDecrement()方法的操作都表現一樣。

所以最終把方法改成new Random().nextInt(Integer.MAX_VALUE)就好了。

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM