我是Java的新手,看着Integer.java实现,我看到'等于'方法的代码是这样的:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
我不明白为什么行
return value == ((Integer)obj).intValue();
调用方法intValue(),为什么它不能直接使用这样的值
return value == ((Integer)obj).value;
并保存一个方法调用。我认为这是为了应对扩展Integer的用户类。但是我看到Integer类被声明为 final 。因此,从性能角度来看,我认为直接使用价值会更有效。
在In Java is there a performance difference between referencing a field through getter versus through a variable?,有几个答案,有人说使用方法与直接访问变量对性能的影响不大,而另一些人则说,除非编译器内联,否则处罚高达7倍。无论如何,它会有某种惩罚。
这不是In Java is there a performance difference between referencing a field through getter versus through a variable?的副本,因为 我在这里问有关Integer.java的特定代码。这似乎是一个小故障,正确的代码应为
return value == ((Integer)obj).value;
你怎么看?
顺便说一句,问题还涉及其他对象,例如整数,长整数,短整数等。