a1.getClass()和a2.getClass()都是java.lang.Class类的对象,为何a1.getClass()==a2.getClass()?

时间:2022-09-06 15:32:02
a1和a2是两个不同的A类的对象,所以a1==a2的值为假
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

#2


引用 1 楼 Q80470101 的回复:
首先,你需要知道==比较的是什么。
参考:
java中==与equel的区别 - java足迹 - ITeye技术网站  
http://xiashengchao.iteye.com/blog/753409


你说的东西我知道,但你可能还不清楚我的意思!

#3


引用 2 楼 imfang 的回复:
Quote: 引用 1 楼 Q80470101 的回复:

首先,你需要知道==比较的是什么。
参考:
java中==与equel的区别 - java足迹 - ITeye技术网站  
http://xiashengchao.iteye.com/blog/753409


你说的东西我知道,但你可能还不清楚我的意思!
呵呵

#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

#2


引用 1 楼 Q80470101 的回复:
首先,你需要知道==比较的是什么。
参考:
java中==与equel的区别 - java足迹 - ITeye技术网站  
http://xiashengchao.iteye.com/blog/753409


你说的东西我知道,但你可能还不清楚我的意思!

#3


引用 2 楼 imfang 的回复:
Quote: 引用 1 楼 Q80470101 的回复:

首先,你需要知道==比较的是什么。
参考:
java中==与equel的区别 - java足迹 - ITeye技术网站  
http://xiashengchao.iteye.com/blog/753409


你说的东西我知道,但你可能还不清楚我的意思!
呵呵

#4


虚拟机会为每种类型管理一个独一无二的Class对象,同一个类new出的对象都公用这一个Class,所以hashcode值一样,但对于同一个类的不同对象来说hashcode值是不一样的,正因为每种类型的Class对象独一无二,所以即便调用更多的getClass()方法得到的还是这个Class,即getClass()得到的是虚拟机为该种类型管理的一个独一无二的Class对象,希望能帮助到您。

#5


因为两个对象调用getClass方法返回的是同一个class对象