Java FindBugs RV绝对值随机整数警告
我正在尝试使用FindBugs对我们的项目进行代码审查 我们有一种生成唯一id的方法(随机): findBugs表示Java FindBugs RV绝对值随机整数警告,java,findbugs,Java,Findbugs,我正在尝试使用FindBugs对我们的项目进行代码审查 我们有一种生成唯一id的方法(随机): findBugs表示RV\u ABSOLUTE\u VALUE\u OF_RANDOM\u INT警告(RV:计算有符号32位随机整数的绝对值的错误尝试),我猜问题出在String.valueOf(Math.abs(RANDOM.nextInt())中 有人能解释为什么会这样以及如何解决吗?可能是因为: assertTrue(Math.abs(Integer.MIN_值)
RV\u ABSOLUTE\u VALUE\u OF_RANDOM\u INT
警告(RV:计算有符号32位随机整数的绝对值的错误尝试),我猜问题出在String.valueOf(Math.abs(RANDOM.nextInt())
中
有人能解释为什么会这样以及如何解决吗?可能是因为:
assertTrue(Math.abs(Integer.MIN_值)<0);
但它只对MIN_值执行此操作,因为无法表示-MIN_值。有点像溢出问题
至于如何修复它:
- 不要制作你自己的UUID。使用
- 在调用Math.abs之前将随机数强制转换为long
- 使用random.nextInt(Integer.MAX_值)获取从0到MAX_值-1的数字
public static String generateUUID(int base){
return String.valueOf(getCurrentTimeInNanos((long)base)) +
String.valueOf(Math.abs(random.nextInt()));
}
assertTrue( Math.abs(Integer.MIN_VALUE) < 0 );