在Java中,爲什麼List<T>.indexOf(Object o)
方法使用參數的equals方法而不是<T>
的equals方法。爲什麼List.indexOf使用傳入Object的equals方法?
這是它是如何編碼:
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
這是我希望它的工作:
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = 0; i < size; i++)
if (elementData[i].equals(o))
return i;
}
return -1;
}
做第二次當第二個for循環就需要做更多的null檢查避免任何NullPointerException的方法。這是唯一的原因嗎?
它爲什麼重要? 「equals」被指定爲對稱的。 –
你只改變了通話的順序嗎? 'e.equals(o)'vs'o.equals(e)'?我們已經知道'o'不是'null'。還有@Louis說的。 ^^^^^ –
不是沒有更多的空檢查需要足夠的理由足夠的事實嗎? – Keppil