码迷,mamicode.com
首页 > 编程语言 > 详细

java 中的 hashCode 出现相同现象

时间:2015-10-08 16:36:53      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:java hashcode char 相加

先来看一个例子

  

public static void main(String[] args) {

String s ="Ea"; 

String d ="FB"; 

System.out.println(s.hashCode());

System.out.println(d.hashCode());

}

结果出乎你的意料,因为打印出来的值是一样的。


查看了java String 类的hashCode 重写方法,发现它是以字符的值作为对象来计算的。

  public int hashCode() {

        int h = hash;

        if (h == 0 && value.length > 0) {

            char val[] = value;


            for (int i = 0; i < value.length; i++) {

                h = 31 * h + val[i];

            }

            hash = h;

        }

        return h;

    }

这样看来,是以字符 char 类型来转化Int 计算的。

又翻了些资料,对于char 的计算转化是以 ascii 码来计算的。

那么对于上面的例子,我们可以还原一下:

public static void main(String[] args) {

String s ="Ea"; 

String d ="FB"; 

System.out.println(s.hashCode());

System.out.println(d.hashCode());

char value[] = "Ea".toCharArray();

char value2[] = "FB".toCharArray();

System.out.println((int)value[0]+" "+(int)value[1]);

System.out.println((int)value2[0]+" "+(int)value2[1]);

System.out.println(31*69+97);

System.out.println(31*70+66);

}

运算结果如下 :

2236

2236

69 97

70 66

2236

2236



由于计算结果的一样,所以这两个字符串的hashCode也是一样的。

所以,以后对于hashCode要慎用了。

本文出自 “小咪的技术博客” 博客,请务必保留此出处http://lvxiaoxi.blog.51cto.com/3438116/1700891

java 中的 hashCode 出现相同现象

标签:java hashcode char 相加

原文地址:http://lvxiaoxi.blog.51cto.com/3438116/1700891

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!