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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 段黄军 中级黑马   /  2015-4-11 17:26  /  770 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在java的反射机制中,在画红线的部分,老师说用“等于”而不是用“equals”,原因是它比较的同一份字节码。我不太明白为什么是同一份字节码?求解答?

5 个回复

倒序浏览
本帖最后由 sisel 于 2015-4-11 18:58 编辑


字节码就是java虚拟机执行加载的类描述二进制码,,从面向对象的角度说就是Class对象
这里其实是一个单例模式,因为加载类的时候绝大多数情况你不可能允许一个绝对类名有不同的字节码,所以一个虚拟机进程下一个类只能对应一份描述它的字节码,从面向对象的角度说:就是只能有一个对应此类的Class对象,所以一个虚拟机进程下取同一个绝对类名的Class对象都指向了同一个对象,同一个内存地址
所以可以用==来比较
回复 使用道具 举报
谢谢   您的解答
回复 使用道具 举报
老大,你注意看你的内容是在哪里吗?是不是在for循环中呀,这时候拿到的只有一份字节码对吧,所以用 == OK,其实equals也OK,只是说理解方式上不太符合逻辑!
回复 使用道具 举报
总结的很不错啊
回复 使用道具 举报
请问一下楼主一个类不是可以创建很多对象吗,难道这些对象在内存中都是同一个地址??
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马