1

私はこのコードを手に入れました:

    System.out.println("Enter the brand and cash value");

    String brand = keyboard.nextLine();

    long cash = keyboard.nextDouble();
    String buffer = keyboard.nextLine();

しかし、比較しようとしている正確な文字列値を入力しても、それらが同じであることを認識できません。不思議なことに、これを入力すると:

compare[0] = new Car ("BMW", 12.00);

これの代わりに:

compare[0] = new Car (brand, 12.00);

できます

私もequalsを使用します:

public boolean equals(Car other)
{
    if (other == null)
    {
        return false;
    }

    if(this.brand == other.brand && this.cash == other.cash)
    {
        return true;
    }
    else
    {
        return false;
    }
}
4

3 に答える 3

5

==文字列の同等性をテストするために使用しています。"BMW"これは文字列リテラルであり、プールにインターンされていますが、brandそうではありません。言い換えれば、あなたが持っている場合:

String s1 = "BMW";
String s2 = "BMW";
String s3 = getString(); //receives "BMW" from the scanner

s1 == s2
s1 == s3である偽
s2 == s3で​​ある偽
s1.equals(s2)で​​ある真
s1.equals(s3)である真
s2.equals(s3)である

結論:equals文字列を比較するために使用する必要があります。

あなたはこの投稿でそれについてもっと読むことができます。

編集

メソッドのコードでequals変更する必要があります

if(this.brand == other.brand && this.cash == other.cash)

これに:

if(this.brand.equals(other.brand) && this.cash == other.cash)

また、他にもいくつか問題があることに注意してください。equals特に、equalsをオーバーライドしません。public boolean equals(Object o)

編集2

たとえば、このようなequalsメソッドを実装できます(ブランドをnullにすることはできないと想定しています。そうでない場合は、その特定のケースも処理する必要があります)

@Override
public boolean equals(Object obj) {
    if (obj == null || getClass() != obj.getClass()) {
        return false;
    }

    final Car other = (Car) obj;
    return (this.cash == other.cash && this.brand.equals(other.brand));
}

メソッドもオーバーライドする必要があることに注意してくださいhashcode

于 2012-11-24T07:19:05.253 に答える
1

あなたが使用する必要があります

this.brand.equals(other.brand)

if代わり にあなたの条項で

this.brand == other.brand

==、文字列の参照とその値をチェックするために使用されます。

この場合、値は同じですが、参照ではありません。

したがって、equals値をチェックするためだけに使用されるため、使用する必要があります。
それがあなたがやりたいことだと思います。

于 2012-11-24T07:57:02.087 に答える
0

以下に示すように、の等しい方法を使用java.lang.Objectします

public boolean equals(Car other)
{
    if (other == null)
    {
        return false;
    }

    if(this.brand.equals(other.brand) && this.cash.equals(other.cash))
    {
        return true;
    }
    else
    {
        return false;
    }
}
于 2012-11-24T07:56:10.870 に答える