String hashCode():总是相同的结果?

CL2*_*L22 3 string android hashcode

这个问题的答案很好地解释了Java的情况。我想知道Android的情况如何。具体来说:

问题1:对于给定的字符串,哈希码总是相同吗?(更具体地说,每次打开应用程序时,我需要给定字符串的哈希码在用户手机上保持相同)。

我在谷歌上搜索了 android 的源代码String并找到了这个,但我正在玩火,因为我不知道有关 Android 源代码的第一件事,是否/何时被制造商修改等。

hashCode()问题 2:如果 1 的答案是否定的,那么我在自己的 hashCode() 函数中使用上面引用的源代码中的代码是否明智?

Loc*_*Loc 6

  • 相同的String应该具有相同的hashCode()(基于hashCode定义)

如果你看一下 Android String 类的 hashCode() 。你会看到 hashCode 是根据 char 数组(相同)、char 计数(相同)和 offset 字段计算的(这个值似乎总是零(0) - 在 String 构造函数中设置 - 我不知道为什么 Google 添加这个偏移量Oracle String.hashCode() 基于 char 数组计算,仅计算 char 计数。

  • 您可以构建自己的 hashCode() 函数,例如 Oracle String hashCode():此实现基于字符数组和字符计数,因此相同的字符串始终具有相同的 hashCode()。