なぜ機能しないのですか?
x
がint
であり、y
がlong
であるためです。
なぜ(x == y)がtrueを返しますか?
(x == (int)y)
あなたはグルーヴィーで[]
構文グルーヴィーを使用してリストを作成背後ArrayList
クラスを使用していますよう
==
オペレータがそう(x == y)
後ろにキャストする型使用することは同じです。だから、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メソッドの実装に依存オブジェクトが渡されました。あなたは関係なく、実際の値のint
を渡していない場合、それはfalse
を返します見ることができるように
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
:あなたは[y].contains(x)
を言うかx in [y]
とき
だから、Integer
のequals()
メソッドの実装を使用します。引数は値に関係なくlong
のインスタンスではない場合、再びfalse
を返し
public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}
:[x].contains(y)
またはy in [x]
はそれがLong
を使用すると言う
場合のは、メソッドの実装に等しいです。
さらなる例として、このコードはfalseを返す必要があります:xはintであり、yが長い
int x = 1
long y = 1
x.equals(y)
ので、あなたが正しいです@dsharew – dsharew
、それは同じオブジェクトではありません。しかし 'x == y'は真を返します。 –
ええ、興味深い点ですが、そうではありません。 :) – dsharew