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)就好了。

参考

原文地址:https://www.cnblogs.com/mrcharleshu/p/13213309.html