Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

銀行口座クラスのequals()をオーバーライド

2つ質問があります。
参考書の例題ですが、等価判定で、なぜ否定形になっているのかがわかりません。
否定形でなくてもいいのではと思いますが、その理由をお願いします。
if (this.accountNo.trim() equals r.accountNo.trim()) {
    return true;
}
return false;

それと、if文の中の感嘆符とequalsの演算順位はequalsが優先だと思いますが、あってますか?
if(!this.accountNo.trim() equals (r.accontNo.trim()))

例題
public class Account {
    String accountNo;
    public boolean equals(Object o) {
        if(o==this) return true;
        if(o==null) return false;
        if(!(o instanceof Account) return false;
        
        Account r=(Account)o;
        
        if(!this.accountNo.trim() equals (r.accountNo.trim())) {
            return false;
        }
        return true;
    }
}
         

4

回答

35275

閲覧

4件の回答

評価

0

>なぜ否定形になっているのかがわかりません。
それはクラスを書いた人による。
単に「falseを優先に返したかった」という気がするが、どちらかが正解というところではない。
極端に判りづらかったり効率が悪かったりでなければ、「どれでも良い」ことは結構多いものだ。

私の場合は
return this.accountNo.trim().equals(r.accountNo.trim());
という書き方が多いし、この程度なら
return o == this || o != null && o instanceof Account && this.accountNo.trim().equals(((Account) o).accountNo.trim());
などと全部まとめることも多い。

>if文の中の感嘆符とequalsの演算順位はequalsが優先だと思いますが
「優先でない」とすると感嘆符はどこに掛かっているか。
そこだけ取り出して成り立つのか。

評価

0

回答をありがとうございました。

否定形に大きな意味があるのかと思っていたので安心しました。

感嘆符のほうは、優先でないと式が破綻しますので、はっきりしました。
とにかく自信がないものですからお聞きしてみました。
感謝します。

評価

0

自信は一朝一夕に作られるものじゃないし、気にする必要はない。
肝心なことは、曖昧な点を曖昧なままにしない、ということだ。
結局その積み重ねだと思う。

むしろ、「自信がある」と言っている人は中途半端な人だ、くらいに思っていても良いだろう。

参考書を読む、質問する、だけでなく、そのコードを思いつくままにいじってみよう。
実際にコードを書き、動かしてみることが、経験になる。
よほどのことをしない限りPCが壊れるなんてことはまずないから、怖がる必要なんてない。

評価

0

激励していただいてありがとうございます。
あまりコードをいじるのは、やってませんでした。
アドバイスを参考に頑張ってみます。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。