报告 equals()hashCode()compareTo()Comparator.compare() 方法内(临时)新对象的构造。

除了构造函数调用之外,还可以通过在 foreach 语句中自动装箱或迭代器创建来创建新对象。 这可能会导致性能问题,例如,将对象添加到 SetMap 时,这些方法将在这些地方被经常调用。

当在 throwassert 语句中创建对象时,该检查将不会报告。

示例:


  class Person {
    private String name;
    private int age;

    public boolean equals(Object o) {
      return Arrays.equals(new Object[] {name, age}, new Object[] {((Foo)o).name, ((Foo)o).age});
    }

    public int hashCode() {
      return (name + age).hashCode();
    }
  }

在此示例中,在 equals() 内部创建了两个额外的数组,age 字段的使用需要装箱,而 name + age 隐式地创建了一个新字符串。