Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java FindBugs RV绝对值随机整数警告_Java_Findbugs - Fatal编程技术网

Java FindBugs RV绝对值随机整数警告

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_值)

我正在尝试使用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_值)<0);
但它只对MIN_值执行此操作,因为无法表示-MIN_值。有点像溢出问题

至于如何修复它:

  • 不要制作你自己的UUID。使用

  • 在调用Math.abs之前将随机数强制转换为long

  • 使用random.nextInt(Integer.MAX_值)获取从0到MAX_值-1的数字


由于没有random.nextLong(long)方法,因此可以将其用作快速破解:Math.abs(Math.max(random.nextLong(),long.MIN_值+1)):保证结果在0..long.max_值范围内。
 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 );