equals()、hashCode()、compareTo() 和 Comparator.compare() 方法内(临时)新对象的构造。
除了构造函数调用之外,还可以通过在 foreach 语句中自动装箱或迭代器创建来创建新对象。
这可能会导致性能问题,例如,将对象添加到 Set 或 Map 时,这些方法将在这些地方被经常调用。
当在 throw 或 assert 语句中创建对象时,该检查将不会报告。
示例:
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 隐式地创建了一个新字符串。