Java String的hashCode值计算为(String.hashCode()):
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
Run Code Online (Sandbox Code Playgroud)
是否存在以下表达式将评估为false的任何情况(例如JVM版本,供应商等)?
boolean expression = "This is a Java string".hashCode() == 586653468
Run Code Online (Sandbox Code Playgroud)
更新#1:如果您声称答案是"是,有这种情况" - 那么请举一个具体的例子,说明"这是一个Java字符串".hashCode()!= 586653468.尝试具体/具体尽可能.
更新#2:我们都知道,依赖hashCode()的实现细节通常很糟糕.但是,我正在特别谈论String.hashCode() - 所以请将答案集中在String.hashCode()上.Object.hashCode()在这个问题的上下文中完全不相关.
是否有可能同一个对象,特别是一个string或任何原始或非常简单的类型(如a struct),.GetHashCode()在不同的机器上调用时产生不同的方法值?
例如,表达式是否可以"Hello World".GetHashCode()在不同的机器上生成不同的值.我主要是要求C#.NET,但我想这可能适用于Java甚至其他语言?
编辑:
从下面的答案和评论中.GetHashCode()可以看出,我知道可以覆盖,并且不能保证它在不同版本的框架之间产生的结果.因此,重要的是要澄清我有简单的类型(不能继承,因此GetHashCode()被覆盖),我在所有机器上使用相同版本的框架.