黑马程序员技术交流社区

标题: java反射学习中遇到的小问题 [打印本页]

作者: 段黄军    时间: 2015-4-11 17:26
标题: java反射学习中遇到的小问题
在java的反射机制中,在画红线的部分,老师说用“等于”而不是用“equals”,原因是它比较的同一份字节码。我不太明白为什么是同一份字节码?求解答?

作者: sisel    时间: 2015-4-11 18:54
本帖最后由 sisel 于 2015-4-11 18:58 编辑


字节码就是java虚拟机执行加载的类描述二进制码,,从面向对象的角度说就是Class对象
这里其实是一个单例模式,因为加载类的时候绝大多数情况你不可能允许一个绝对类名有不同的字节码,所以一个虚拟机进程下一个类只能对应一份描述它的字节码,从面向对象的角度说:就是只能有一个对应此类的Class对象,所以一个虚拟机进程下取同一个绝对类名的Class对象都指向了同一个对象,同一个内存地址
所以可以用==来比较

作者: 段黄军    时间: 2015-4-11 20:51
谢谢   您的解答
作者: wkz_crystal    时间: 2015-4-11 21:00
老大,你注意看你的内容是在哪里吗?是不是在for循环中呀,这时候拿到的只有一份字节码对吧,所以用 == OK,其实equals也OK,只是说理解方式上不太符合逻辑!
作者: chenlong    时间: 2015-4-11 21:03
总结的很不错啊
作者: chenlong    时间: 2015-4-11 21:06
请问一下楼主一个类不是可以创建很多对象吗,难道这些对象在内存中都是同一个地址??




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