对File对象调用hashCode()方法会触发此SonarQube问题:
改为使用原始值。
如何解决?有什么帮助吗?
File file = ......
.... = Math.abs(file.hashCode());
更新:问题的SonarQube描述为here
我可以写:.... = Math.abs(file.hashCode()+ 1);
答案 0 :(得分:4)
问题的原因是Integer.MIN在获取绝对值时返回自身。此问题的描述为here。
解决方案取决于您需要的价值。您建议的解决方案(Math.abs(file.hashCode() + 1)
)无法正常工作,因为如果hashCode()
函数返回Integer.MAX,那么加1仍然是Integer.MIN,因此最终结果仍可能是负数。 / p>
如果你真的需要文件的正哈希,你可以这样做:
final int hash = file.hashCode() == Integer.MIN ? Integer.MAX : Math.abs(file.hashCode());