我可以使用==
运算符和equals
方法比较两个不同的对象,以了解它们是属于同一个类还是不同。但哪一种更好的方法又如何?看看我遵循的两种方法。什么是比较两个对象类的更好方法
//r2 and r3 are two different objects
//first approach Using == operator
boolean firstApproach = ((Object)(r2.getClass()) ==((Object)r3.getClass()));
//second approach Using equals method to compare
boolean secondApproach = ((Object)(r2.getClass())).equals(((Object)r3.getClass()));
System.out.println("...firstApproach ..."+firstApproach +"...secondway.."+secondway );
答案 0 :(得分:4)
为什么不呢?
boolean sameClasses = r2.getClass() == r3.getClass();
答案 1 :(得分:4)
java.lang.Class
从equals()
继承了java.lang.Object
实施:
public boolean equals(Object obj) {
return (this == obj);
}
因此,比较类的方式并不重要。此外,类加载器无关紧要,因为行为将保持不变。
答案 2 :(得分:1)
简单r2.getClass() == r3.getClass()
没有演员表。如果类由同一个类加载器加载(我想在你的情况下它就像那样)那么身份比较没有问题。
答案 3 :(得分:1)
从语义的角度来看,使用==或equals来比较两个Class
对象之间没有区别。他们给出了同样的答案。
如果存在任何差异,那么代码的可读性就是如此。虽然Java专家应该知道你可以安全地使用==来比较类,但非专家不太可能知道这一点,并且使用==可能会为他们敲响警钟。所以可以说使用equals
使你的代码更具可读性...对于下一个人,如果没有你。但这是一个边际呼吁。
如果您担心可读性,那么您应该摆脱不必要的(Object)
类型转换。除了让您的代码更难阅读之外,它们没有用处......
答案 4 :(得分:0)
如果你想知道它是否同样使用 .equals
,但更有可能你想使用 instanceof
来确定一个对象是一个类的实例。
答案 5 :(得分:0)
您的第一种方法有两个主要限制: 1)如果必须在代码中的多个位置实现此逻辑,并且如果您希望更改检查两个对象是否相等的标准,则必须在许多不同的位置更改代码 2)在幕后,Java经常想要比较两个对象,但默认情况下它并不知道如何确定相等性,所以如果你不遵循第二种方法就错过了。
所以,我觉得第二种方法更好。