| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 809 人关注过本帖
标题:hashCode() 和 == 的问题?
只看楼主 加入收藏
净★星
Rank: 1
来 自:四川
等 级:新手上路
帖 子:14
专家分:8
注 册:2011-6-20
结帖率:0
收藏
已结贴  问题点数:20 回复次数:10 
hashCode() 和 == 的问题?
源码:
public class NewTest {
    public static void main(String[] args) {
        String s1 = "test";
        String s2 = new String("test");
        
        System.out.println(s1.hashCode());
        System.out.println(s2.hashCode());
        System.out.println(s1 == s2);
    }
}
运行结果:
3556498
3556498
false
为什么hashCode码相同,而==是false。
搜索更多相关主题的帖子: public false 
2013-09-10 18:14
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:4 
哎...Java是引用类型懂不?

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-09-10 18:16
净★星
Rank: 1
来 自:四川
等 级:新手上路
帖 子:14
专家分:8
注 册:2011-6-20
收藏
得分:0 
回复 2楼 peach5460
知道啊,hashCode返回的不是地址吗? == 又是比较的地址,为什么会是false???
2013-09-10 18:54
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
String s1 = "test";
        String s2 = new String("test");

你觉得这两个地址怎么可能一致
不false难道true啊

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-09-10 18:58
净★星
Rank: 1
来 自:四川
等 级:新手上路
帖 子:14
专家分:8
注 册:2011-6-20
收藏
得分:0 
回复 4楼 peach5460
那为什么hashCode值相等,hashCode值不是内存地址吗?
2013-09-10 19:11
husiwen
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:227
专家分:1125
注 册:2010-5-23
收藏
得分:4 
hashcode 返回的不是地址,而是经过地址运算后产生的一个数
2013-09-10 21:31
净★星
Rank: 1
来 自:四川
等 级:新手上路
帖 子:14
专家分:8
注 册:2011-6-20
收藏
得分:0 
回复 6楼 husiwen
明白了,谢谢!
2013-09-11 13:20
ming10086
Rank: 2
等 级:论坛游民
帖 子:5
专家分:15
注 册:2013-9-11
收藏
得分:4 
String s1 = "test";
String s2 = new String("test");
hashcode()是根据经过一些列的加减乘除计算出的一个整数,我们来计算hashcode的值一般根据传入的数据转换为整数后乘以31的到的整数,你传入的都是test所以hashcode的值是相等的,
==是比较的两个内存地址,在内存中的存储情况是:"test"在对象池中,但 new String()创建的对象在堆中存储,在该对象里又有一个引用,指向了对象池中的中一个"test",所以==的结果是false
则s1.equals(s2)是比较的s1,s2的内容,结果是true,因为String类中覆盖了父类equals()方法,

[ 本帖最后由 ming10086 于 2013-9-11 22:32 编辑 ]
2013-09-11 22:31
mashunty
Rank: 1
等 级:新手上路
帖 子:4
专家分:9
注 册:2013-9-11
收藏
得分:4 
用s1.equals(s2)
2013-09-11 23:27
丶弱水彡千
Rank: 5Rank: 5
来 自:地狱十九层
等 级:职业侠客
威 望:2
帖 子:203
专家分:369
注 册:2013-6-16
收藏
得分:4 
受教了

这个怎么玩
2013-09-12 12:45
快速回复:hashCode() 和 == 的问题?
数据加载中...
 
   



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

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