diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/hash/MurmurHash.java b/hutool-core/src/main/java/cn/hutool/core/lang/hash/MurmurHash.java index 94826602b..2369c30e8 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/hash/MurmurHash.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/hash/MurmurHash.java @@ -95,11 +95,11 @@ public class MurmurHash implements Serializable{ int k1 = 0; switch (length - idx) { case 3: - k1 ^= data[idx + 2] << 16; + k1 ^= (data[idx + 2] & 0xff) << 16; case 2: - k1 ^= data[idx + 1] << 8; + k1 ^= (data[idx + 1] & 0xff) << 8; case 1: - k1 ^= data[idx]; + k1 ^= (data[idx] & 0xff); // mix functions k1 *= C1_32; diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/hash/MurMurHashTest.java b/hutool-core/src/test/java/cn/hutool/core/lang/hash/MurMurHashTest.java index fcf946b5e..4a4628145 100755 --- a/hutool-core/src/test/java/cn/hutool/core/lang/hash/MurMurHashTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/lang/hash/MurMurHashTest.java @@ -9,15 +9,15 @@ public class MurMurHashTest { @Test public void hash32Test() { int hv = MurmurHash.hash32(StrUtil.utf8Bytes("你")); - Assert.assertEquals(222142701, hv); + Assert.assertEquals(-1898877446, hv); hv = MurmurHash.hash32(StrUtil.utf8Bytes("你好")); - Assert.assertEquals(1188098267, hv); + Assert.assertEquals(337357348, hv); hv = MurmurHash.hash32(StrUtil.utf8Bytes("见到你很高兴")); - Assert.assertEquals(-1898490321, hv); + Assert.assertEquals(1101306141, hv); hv = MurmurHash.hash32(StrUtil.utf8Bytes("我们将通过生成一个大的文件的方式来检验各种方法的执行效率因为这种方式在结束的时候需要执行文件")); - Assert.assertEquals(-1713131054, hv); + Assert.assertEquals(-785444229, hv); } @Test