A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高昌德 中级黑马   /  2014-11-7 10:46  /  1495 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如题:内存地址值和hashcode值有什么区别?
          如何获取内存地址值?

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

4 个回复

倒序浏览
hashcode   相等,则对象一定一样;对象不相等,hashcode也有可能一样。我在网上找了个例子拿来你看下一吧:
import java.util.ArrayList;

/**
* @author      MK
*
* 此方法的作用是证明 java.lang.Object的hashcode 不是代表 对象所在内存地址。
* 我产生了10000个对象,这10000个对象在内存中是不同的地址,但是实际上这10000个对象
* 的hashcode的是完全可能相同的
*/
public class HashCodeMeaning {
    public static void main(String[] args) {
        ArrayList list =  new ArrayList();
        int numberExist=0;
        
        //证明hashcode的值不是内存地址
        for (int i = 0; i < 10000; i++) {
            Object obj=new Object();
            if (list.contains(obj.toString())) {
                System.out.println(obj.toString() +"  exists in the list. "+ i);
                numberExist++;
            }
            else {
                list.add(obj.toString());
            }
        }
        
        System.out.println("repetition number:"+numberExist);
        System.out.println("list size:"+list.size());
        
        //证明内存地址是不同的。
        numberExist=0;
        list.clear();
        for (int i = 0; i < 10000; i++) {
            Object obj=new Object();
            if (list.contains(obj)) {
                System.out.println(obj +"  exists in the list. "+ i);
                numberExist++;
            }
            else {
                list.add(obj);
            }
        }
        
        System.out.println("repetition number:"+numberExist);
        System.out.println("list size:"+list.size());
    }
}
运行输出结果:

java.lang.Object@922804  exists in the list. 1778
java.lang.Object@e29820  exists in the list. 2077
repetition number:2
list size:9998
repetition number:0
list size:10000
回复 使用道具 举报
zxbzxb333 发表于 2014-11-7 17:24
hashcode   相等,则对象一定一样;对象不相等,hashcode也有可能一样。我在网上找了个例子拿来你看下一吧 ...

表示看不懂,toString()方法打印的是地址值吗?
回复 使用道具 举报
高昌德 发表于 2014-11-7 19:02
表示看不懂,toString()方法打印的是地址值吗?

对象toString后的@922804这个玩意儿就是哈希值
回复 使用道具 举报
有一定的关系,通过一定的算法算出哈希值进行内存中地址分配的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马