首页 > 解决方案 > 什么是更高性能的 equal 或 instanceof?

问题描述

表演者使用哪种方法?

等于:

public boolean hasSellByDate(Object item) {
  if ("Pear".equals(item.getClass().getSimpleName())) {
    return true;
  }
  return false;
}

实例:

public boolean hasSellByDate(Object item) {
   if (item instanceof food.Pear) {
     return true;
   }
   return false;
 }

这两种方法有什么区别,每种情况有什么缺点?

标签: javaperformance

解决方案


第二个要好得多,因为第一个可以通过重构来破坏,并且类型系统不会让您知道。

您还应该知道,第一种方法不适用于 的子类Pear,如果您有的话。更糟糕的是,如果您"Pear"在不同的命名空间中调用了多个类,可能会感到困惑。

至于性能,您需要进行基准测试,但我希望第二个也更快,因为instanceof它是 JVM 上的单个操作码(https://en.wikipedia.org/wiki/Java_bytecode_instruction_listings)。


推荐阅读