今天早上旁邊同事喊我看一個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)
就好了。