什么是比较两个对象的类的更好方法

时间:2011-12-08 14:57:18

标签: java

我可以使用==运算符和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 );

6 个答案:

答案 0 :(得分:4)

为什么不呢?

boolean sameClasses = r2.getClass() == r3.getClass();

答案 1 :(得分:4)

java.lang.Classequals()继承了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经常想要比较两个对象,但默认情况下它并不知道如何确定相等性,所以如果你不遵循第二种方法就错过了。

所以,我觉得第二种方法更好。