a1.getClass()和a2.getClass()都是java.lang.Class类的对象,[color=#FF0000]为何a1.getClass()==a2.getClass()的值却为真?Why???[/color]
class A
{
}
class Test{
public static void main(String[] args) {
A a1=new A();
A a2=new A();
System.out.println("a1.hashCode="+a1.hashCode()+", a2.hashCode="+a2.hashCode());
System.out.println(a1==a2);
System.out.println(a1.getClass().getName());//a1是哪个类的对象?
System.out.println("a1.getClass().hashCode="+a1.getClass().hashCode()+", a2.getClass().hashCode="+a2.getClass().hashCode());
System.out.println(a1.getClass()==a2.getClass());
System.out.println(a1.getClass().getClass().getName());//a1.getClass()得到的是哪个类的对象?
}
}
运行结果:
a1.hashCode=366712642, a2.hashCode=1829164700
false
A
a1.getClass().hashCode=2018699554, a2.getClass().hashCode=2018699554
true
java.lang.Class
5 个解决方案
#1
首先,你需要知道==比较的是什么。
参考:
java中==与equel的区别 - java足迹 - ITeye技术网站
http://xiashengchao.iteye.com/blog/753409
参考:
java中==与equel的区别 - java足迹 - ITeye技术网站
http://xiashengchao.iteye.com/blog/753409
#2
你说的东西我知道,但你可能还不清楚我的意思!
#3
呵呵
#4
虚拟机会为每种类型管理一个独一无二的Class对象,同一个类new出的对象都公用这一个Class,所以hashcode值一样,但对于同一个类的不同对象来说hashcode值是不一样的,正因为每种类型的Class对象独一无二,所以即便调用更多的getClass()方法得到的还是这个Class,即getClass()得到的是虚拟机为该种类型管理的一个独一无二的Class对象,希望能帮助到您。
#5
因为两个对象调用getClass方法返回的是同一个class对象
#1
首先,你需要知道==比较的是什么。
参考:
java中==与equel的区别 - java足迹 - ITeye技术网站
http://xiashengchao.iteye.com/blog/753409
参考:
java中==与equel的区别 - java足迹 - ITeye技术网站
http://xiashengchao.iteye.com/blog/753409
#2
首先,你需要知道==比较的是什么。
参考:
java中==与equel的区别 - java足迹 - ITeye技术网站
http://xiashengchao.iteye.com/blog/753409
你说的东西我知道,但你可能还不清楚我的意思!
#3
首先,你需要知道==比较的是什么。
参考:
java中==与equel的区别 - java足迹 - ITeye技术网站
http://xiashengchao.iteye.com/blog/753409
你说的东西我知道,但你可能还不清楚我的意思!
#4
虚拟机会为每种类型管理一个独一无二的Class对象,同一个类new出的对象都公用这一个Class,所以hashcode值一样,但对于同一个类的不同对象来说hashcode值是不一样的,正因为每种类型的Class对象独一无二,所以即便调用更多的getClass()方法得到的还是这个Class,即getClass()得到的是虚拟机为该种类型管理的一个独一无二的Class对象,希望能帮助到您。
#5
因为两个对象调用getClass方法返回的是同一个class对象