【问题标题】:What is Difference Comparing Class Types in JavaJava中比较类类型的区别是什么
【发布时间】:2023-03-21 17:10:02
【问题描述】:
public <T, V> void F1(T p1, V p2) {
    //Method 1
    if (p1.getClass() == p2.getClass()) {
    }

    //Method 2
    if (p1.getClass().equals(p2.getClass())) {
    }

    //Method 3
    if (p1.getClass().getName().equals(p2.getClass().getName())) {
    }
}

我要比较参数的类,

哪种方法更安全,或者3的用法有什么区别?

【问题讨论】:

  • 我现在无法测试它,但似乎第三种方法有缺陷:两个类可以在不同的命名空间中具有相同的名称。
  • @JeroenVannevel getName() 方法不返回类的完全限定名吗?
  • @RohitJain: appearantly not
  • @JeroenVannevel 该类不在任何包中。你期望它打印什么?
  • @JeroenVannevel:他们确实做到了。 obj.getClass().getName() 返回 com.test.MyClass

标签: java class generics compare


【解决方案1】:

这三种方法都将执行相同的任务。但理想情况下,您应该采用第一种方法。事实上,由于Class 没有覆盖equals() 方法,它无论如何都会调用Object#equals() 方法。这也是有道理的,对于每个特定的类,每个类加载器只有一个类实例。因此,使用== 比较它们会非常好。

另外,我认为如果p1p2对应不同类加载器加载的同一个类,那么前两个条件将是false,而最后一个条件将是true

【讨论】:

    【解决方案2】:

    这取决于您需要检查的内容。你是三种方法检查三种不同的东西:

    1. 检查 Class 的两个实例是否同一个实例
    2. 检查 Class 的两个实例是 同一个 Class 的实例
    3. 检查 Class 的两个实例是两个同名的类(不一定是同一个 Class)的实例

    【讨论】:

      猜你喜欢
      • 2010-10-24
      • 2011-09-03
      • 1970-01-01
      • 2012-07-19
      • 2012-07-06
      • 1970-01-01
      • 2010-10-02
      • 2018-12-10
      • 1970-01-01
      相关资源
      最近更新 更多