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
隐式地创建了一个新字符串。