黑马程序员技术交流社区

标题: 内存地址值和hashcode值得区别? [打印本页]

作者: 高昌德    时间: 2014-11-7 10:46
标题: 内存地址值和hashcode值得区别?
如题:内存地址值和hashcode值有什么区别?
          如何获取内存地址值?

作者: zxbzxb333    时间: 2014-11-7 17:24
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

作者: 高昌德    时间: 2014-11-7 19:02
zxbzxb333 发表于 2014-11-7 17:24
hashcode   相等,则对象一定一样;对象不相等,hashcode也有可能一样。我在网上找了个例子拿来你看下一吧 ...

表示看不懂,toString()方法打印的是地址值吗?
作者: zxbzxb333    时间: 2014-11-7 19:51
高昌德 发表于 2014-11-7 19:02
表示看不懂,toString()方法打印的是地址值吗?

对象toString后的@922804这个玩意儿就是哈希值
作者: zhangyangLengen    时间: 2014-11-7 20:47
有一定的关系,通过一定的算法算出哈希值进行内存中地址分配的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2