FindBugs RV_ABSOLUTE_VALUE_OF_RANDOM_INT警告

时间:2011-09-27 10:02:45

标签: java findbugs

我正在尝试使用FindBugs对我们的项目进行代码审查。

我们有一个生成唯一ID(随机)的方法:

 public static String generateUUID(int base){

    return String.valueOf(getCurrentTimeInNanos((long)base))  + 

                     String.valueOf(Math.abs(random.nextInt()));
 }

和findBugs表示RV_ABSOLUTE_VALUE_OF_RANDOM_INT警告(RV:尝试计算有符号32位随机整数的绝对值),我想问题出在String.valueOf(Math.abs(random.nextInt())

有没有人解释为什么会这样以及如何解决?

1 个答案:

答案 0 :(得分:18)

也许是因为Math.abs can actually return negative results for integer inputs

assertTrue( Math.abs(Integer.MIN_VALUE) < 0 );

它只对MIN_VALUE执行此操作,因为无法表示-MIN_VALUE。有点溢出问题。

至于如何修复它:

  • 不要制作自己的UUID。使用java.util.UUID

  • 在调用Math.abs

  • 之前将随机数转换为long
  • 使用random.nextInt(Integer.MAX_VALUE)获取0到MAX_VALUE之间的数字 - 1