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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谭立文 中级黑马   /  2012-6-24 22:05  /  2401 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谭立文 于 2012-6-25 15:56 编辑

import java.util.Date;

public class Test {

    public static void main(String[] args)
    {  
            Class class1 = java.util.Date.class;
            System.out.println(class1.hashCode());

            Date date = new Date();
            Class class2 = date.getClass();
            System.out.println(class2.hashCode());
    }

}
输出的两个hashCode为什么相同。

8 个回复

倒序浏览
还没仔细学反射…………不过class1 和 class2 好像代表的都是Date 这个字节码吧
回复 使用道具 举报
本帖最后由 周兴中 于 2012-6-24 22:47 编辑

import java.util.Date;

public class Test {

    public static void main(String[] args)
    {  
            Class class1 = java.util.Date.class; // java.util.Date等同于Date ,每一个.class文件都有一个自身的字节码,在内存中只有一个Date类对应的字节码.     
           System.out.println(class1.hashCode());

            Date date = new Date();  // 由于你新建的实例对象也由java.util.Date 类创建,所以他们的字节码是一样的, Class.forName("java.util.Date"); 也将得到同样的字节码,这3种是最常使用的获取字节码方式.
            Class class2 = date.getClass();
            System.out.println(class2.hashCode());
    }

}

请参考 张孝祥Java高新技术第17个视频.

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1

查看全部评分

回复 使用道具 举报
周兴中 发表于 2012-6-24 22:18
import java.util.Date;

public class Test {

这样是可以的。
回复 使用道具 举报
本帖最后由 唐辉辉 于 2012-6-24 22:35 编辑

因为它们的字节码对象是同一个。 只要是同种类型的,在加载进来的是同一个字节码对象。
回复 使用道具 举报

每一个.class文件都有一个自身的字节码,在加载进来只要是同种类型就为同一个字节码对象。 Date date = new Date();  新建的实例对象由java.util.Date 类创建,所以他们的字节码是一样的, Class.forName("java.util.Date"); 也将得到同样的字节码,它们的字节码对象是同一个。
回复 使用道具 举报
事实证明,这两份字节码hashCode是一样的!
回复 使用道具 举报
楼主要判断这两个hashCode有什么相同

其实是一样的
可以 == 来验证
代码如下:

*/

import java.util.Date;

public class Test {
        
        public static void main(String[] args)
    {  
            Class class1 = java.util.Date.class;
            System.out.println(class1.hashCode());

            Date date = new Date();
            Class class2 = date.getClass();
            System.out.println(class2.hashCode());
            
            //打印结果为true
             System.out.println(class1.hashCode() == class2.hashCode());
    }

}
回复 使用道具 举报
只有采用hash算法的那些集合像 hashSet 这些重写hashcode算法才有效
由于Date类在编译之后在内存当中的就是一份字节码 是一样的 这就好像 你定义两个String 对象 通过反射获得字节码也是一样的 是一个道理
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马