質問: compactValFor(this.intVal); return this.inflated().equals(xDec.inflated()); } ``` Integerクラスも確認したところ、オブジェクト同士の確認もするが Integerクラス同士のオブジェクトの比較の際には、中の値を比べてくれるコードが記述されていました。 なので、Integerクラスにおいて、オブジェクト同士が同値であるかどうか確認したい場合は (Integerクラス内でオーバーライドした)equalsメソッドを使う、で大丈夫だと思いました。 長々と申し訳ありません。皆様ありがとうございました。
回答: `==`で比較しても問題ないのは、他の方の回答と同じなので割愛して > > このように行うことは良くないでしょうか。ルール外になりますか。 > > > について、わかっていれば(同一インスタンスを比較する)問題ないと思います。 一部のIntegerインスタンスは、共有されるは知っていて損はないですが、今回の件とは関係ありません。 ルール外というか気になったのは数値の比較をequalsでやるものという点です。 以下は、1という数字の比較ですがequalsでは期待通りになりません。 sysoutの結果を見れば、違いはわかると思います。 ``` BigDecimal bg1 = new BigDecimal(1); BigDecimal bg2 = new BigDecimal(1).setScale(3); System.out.println(bg1); System.out.println(bg2); System.out.println(bg1.equals(bg2)); System.out.println(bg1.compareTo(bg2) == 0); ``` Integerなので、scale無いのですが比較を必ずequalsでやるものと覚えてしまうと 意図しない結果になることがあるかもしれません。 `==`の比較が使える場面では、私は積極的に使った方がよいと考えます。 とはいえ、==比較でバグを埋め込みやすいのは事実なので、使える場面を見極める必要があります。 ``` Integer in = 2; Integer in2 = 1 + 1; // 一部のIntegerは同じインスタンスが利用される boolean b = in == in2; System.out.println("in == in2 : " + b); // true Integer th = 1000; Integer th2 = 999 + 1; b = th == th2; System.out.println("th == th2 : " + b); // false b = ((int)th == (int)th2); System.out.println("(int)th == (int)th2 : " + b); // true b = Integer.compare(th, th2) == 0; System.out.println("Integer.compare(th, th2) == 0 : " + b); // true ```