Javaの扱い方==
やequals()
、その他の種類の数値については少し混乱しています。例えば:int
Integer
Integer X = 9000;
int x = 9000;
Short Y = 9000;
short y = 9000;
List<Boolean> results = new ArrayList<Boolean>();
// results.add(X == Y); DOES NOT COMPILE 1)
results.add(Y == 9000); // 2)
results.add(X == y); // 3)
results.add(X.equals(x)); // 4)
results.add(X.equals(Y)); // 5)
results.add(X.equals(y)); // 6)
System.out.println(results);
出力(多分あなたは最初にあなたの推測をするべきです):
[true, true, true, false, false]
X == Y
異なるオブジェクトであるため、コンパイルされないことが予想されます 。- 9がデフォルトでであり、1)がコンパイルさえされていないことを考えると、私は少し驚いて
Y == 9
います。を期待するメソッドにを入れることはできませんが、ここではそれらは等しいことに注意してください。true
int
int
Short
- これは2つと同じ理由で驚くべきことですが、もっと悪いようです。
x
とに自動ボックス化されているので、当然のことInteger
です。- 当然のことながら、異なるクラスのオブジェクトはであってはなりません
equal()
。 - 何??
X == y
ですtrue
が?X.equals(y)
_ 常により厳密にfalse
すべきではありませんか?==
equals()
誰かが私がこれを理解するのを手伝ってくれるなら、私はそれを感謝します。==とequals()はどのような理由でこのように動作しますか?
編集: この動作が-128から127までの整数の動作とは関係がないことを示すために、9を9000に変更しました。
2番目の編集: わかりました。このことを理解していると思われる場合は、念のため、次のことを検討する必要があります。
Integer X = 9000;
Integer Z = 9000;
short y = 9000;
List<Boolean> results = new ArrayList<Boolean>();
results.add(X == Z); // 1)
results.add(X == y); // 2)
results.add(X.equals(Z)); // 3)
results.add(X.equals(y)); // 4)
System.out.println(results);
出力:
[false, true, true, false]
その理由は、私が理解している限りでは次のとおりです。
- 別のインスタンス、とても違う。
X
ボックス化されていない場合は同じ値なので、等しい。- 同じ値なので、等しい。
y
ボックス化するInteger
ことはできないので、等しくすることはできません。