为什么它不起作用?
因为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