爲什麼它不起作用?
因爲x
是int
和y
是long
。
爲什麼(x == y)返回true?
的==
操作員使用類型轉換之後,以便(x == y)
是一樣的:
(x == (int)y)
當您在常規使用[]
語法常規列表使用ArrayList
類的後面。所以in
和方法返回取決於方法implementaion:
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
正如你可以看到它調用indexOf
方法:
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;
}
和indexOf
方法實際上取決於對equals方法的實現對象已通過。
所以,當你說[y].contains(x)
或x in [y]
它將使用Integer
的equals()
方法實現:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
正如你可以看到它會返回false
,如果你不傳遞一個int
不管實際價值。
如果說[x].contains(y)
或y in [x]
它將使用Long
的equals方法實現:
public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}
再次返回false
如果參數不是long
實例,而不管價值。
作爲進一步的例子此代碼應返回false:
int x = 1
long y = 1
x.equals(y)
因爲x是int和Y是長 – dsharew
@dsharew你是正確的,這是不一樣的物體。但'x == y'返回true。 –
是有趣的一點,但事實並非如此。 :) – dsharew