gpt4 book ai didi

java - 这个hashCode方法会溢出吗?

转载 作者:行者123 更新时间:2023-12-02 04:14:19 25 4
gpt4 key购买 nike

我正在编写一个具有成就系统的 Android 应用程序,类似于 Stack Overflow 的徽章。我还使用 Sugar ORM 将成就的进度存储在数据库中。这是 Achievement` 类:

public class Achievement extends SugarRecord<Achievement>{
@StringRes
public int shortNameId;
@StringRes
public int descriptionId;
public int progressNow;
public int fullProgress;
//I am afraid that Sugar ORM will ignore private fields
//so I made them public. Please tell me if Sugar ORM does
//not ignore those.
}

现在我想重写类中的 hashCode 方法。根据Effective Java第二版,我是这样实现的:

@Override
public int hashCode () {
int result = 17;
result = result * 31 + shortNameId;
result = result * 31 + descriptionId;
result = result * 31 + fullProgress;
return result;
}

然后我查看了生成的 R.java 来查看字符串 res id 是什么(我只是好奇)。我意识到它们是相当大的数字。在 hashCode 方法中,我将 result 乘以 31, 3 倍,这已经有点大了。现在我将非常大的资源 ID 添加到其中。恐怕结果值会超过 Integer.MAX_VALUE

你能告诉我我的hashCode方法是否会溢出吗?如果是这样我该如何修复它?

最佳答案

没关系。整数溢出不会产生异常或其他错误,它只是从 MIN_VALUE 绕回。 hashCode() 唯一有用的特性(除了相等要求之外)是它可以以某种方式分散到不同的值。负哈希码没问题。 (事实上​​,Integer#hashCode() 只是 int 值。)

关于java - 这个hashCode方法会溢出吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33471065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com