| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 321 人关注过本帖
标题:关于声明String和StringBuilder对象hashCode的问题
只看楼主 加入收藏
liuxiuhao
Rank: 2
来 自:河南省民权县
等 级:论坛游民
帖 子:8
专家分:10
注 册:2011-5-18
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
关于声明String和StringBuilder对象hashCode的问题
StringBuilder a = new StringBuilder("a");
    StringBuilder b = new StringBuilder("a");
    System.out.println(a.hashCode());
    System.out.println(b.hashCode());
    System.out.println(a==b);
    System.out.println(a.equals(b));
    System.out.println("-----------------");
    String aa = new String("aa");
    String bb = new String("aa");
    System.out.println(aa.hashCode());
    System.out.println(bb.hashCode());
    System.out.println(aa==bb);
    System.out.println(aa.equals(bb));
结果:
    78236
    6301159
    false
    false
    -----------------
    3104
    3104
    false
    true
结果发现:
StringBuilder声明的对象hashCode值不同。String 声明的对象HashCode值相同。故 a.equals(b)为flase,aa.equals(bb)true;
a==b;aa==bb;两者为flase是因为==比较的是对象的值,每new一次。创建一个新值所以为flase;
但为什么StringBuilder声明的对象hashCode值不同呢?有人能帮我解释下吗?
2013-01-14 16:00
liuxiuhao
Rank: 2
来 自:河南省民权县
等 级:论坛游民
帖 子:8
专家分:10
注 册:2011-5-18
收藏
得分:0 
明白了:
查看StringBuilder 和String 的equals内部方法就知道了。
StringBuilder 里继承了Object里的equals方法。比较的是引用值  
如下:
   public boolean equals(Object obj) {
    return (this == obj);
    }
String覆盖了Object的equals方法如下:
 public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
        char v1[] = value;
        char v2[] = anotherString.value;
        int i = offset;
        int j = anotherString.offset;
        while (n-- != 0) {
            if (v1[i++] != v2[j++])
            return false;
        }
        return true;
        }
    }
    return false;
    }

有能力,有财富才是王道
2013-01-14 16:37
shellingford
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:19
帖 子:228
专家分:1348
注 册:2010-8-9
收藏
得分:20 
理解一下stringbuilder是做什么用的
如果只是new一个字符串还是用new String吧
stringbuilder是用来字符串拼接的,效率上高于string的+号运算
既然是拼接,那么stringbuilder的hashcode自然就不应该一致
2013-01-14 20:16
快速回复:关于声明String和StringBuilder对象hashCode的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027870 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved