質問編集履歴
3
test
CHANGED
File without changes
|
test
CHANGED
@@ -120,7 +120,7 @@
|
|
120
120
|
|
121
121
|
|
122
122
|
|
123
|
-
これについて調べていった結果、equalメソッドは、BigDecimalクラスでオーバーライドされていて、
|
123
|
+
これについて調べていった結果、equalsメソッドは、BigDecimalクラスでオーバーライドされていて、
|
124
124
|
|
125
125
|
(Integerクラスや、Stringクラスでもされていました。他にもあるかもしれません)
|
126
126
|
|
@@ -186,7 +186,7 @@
|
|
186
186
|
|
187
187
|
なので、Integerクラスにおいて、オブジェクト同士が同値であるかどうか確認したい場合は
|
188
188
|
|
189
|
-
(Integerクラス内でオーバーライドした)equalメソッドを使う、で大丈夫だと思いました。
|
189
|
+
(Integerクラス内でオーバーライドした)equalsメソッドを使う、で大丈夫だと思いました。
|
190
190
|
|
191
191
|
|
192
192
|
|
2
文字の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -100,7 +100,7 @@
|
|
100
100
|
|
101
101
|
```
|
102
102
|
|
103
|
-
### 皆さんのご回答をもとに、少し調べた内容
|
103
|
+
### 【追記】皆さんのご回答をもとに、少し調べた内容
|
104
104
|
|
105
105
|
まずここまで、==で比較すると、インスタンスの比較になると理解しました。
|
106
106
|
|
1
追記させて頂きます。
test
CHANGED
File without changes
|
test
CHANGED
@@ -99,3 +99,95 @@
|
|
99
99
|
}
|
100
100
|
|
101
101
|
```
|
102
|
+
|
103
|
+
### 皆さんのご回答をもとに、少し調べた内容
|
104
|
+
|
105
|
+
まずここまで、==で比較すると、インスタンスの比較になると理解しました。
|
106
|
+
|
107
|
+
System.arraycopyでは中身をコピーしたが、Integer型の配列なので、値が格納されているメモリの場所をコピーしている事になって、結果としてコピーしたものはコピー元と同じオブジェクトを指しているという事。
|
108
|
+
|
109
|
+
そして、momon-ga様が二つ目に示して頂いたコードの中のように、intでキャストして比較ができるという事。
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
ただ、疑問に思った事。
|
114
|
+
|
115
|
+
momon-ga様が最初に示して頂いたコードの、下から2行目の結果がfalseになる事が疑問でした。
|
116
|
+
|
117
|
+
> System.out.println(bg1.equals(bg2)); //false
|
118
|
+
|
119
|
+
System.out.println(bg1.compareTo(bg2) == 0); //true
|
120
|
+
|
121
|
+
|
122
|
+
|
123
|
+
これについて調べていった結果、equalメソッドは、BigDecimalクラスでオーバーライドされていて、
|
124
|
+
|
125
|
+
(Integerクラスや、Stringクラスでもされていました。他にもあるかもしれません)
|
126
|
+
|
127
|
+
|
128
|
+
|
129
|
+
以下のように記述されており、上から三つ目のifのところが該当の箇所だと思われます。
|
130
|
+
|
131
|
+
スケール値が違うとfalseを返すというような。
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
```java
|
136
|
+
|
137
|
+
@Override
|
138
|
+
|
139
|
+
public boolean equals(Object x) {
|
140
|
+
|
141
|
+
if (!(x instanceof BigDecimal))
|
142
|
+
|
143
|
+
return false;
|
144
|
+
|
145
|
+
BigDecimal xDec = (BigDecimal) x;
|
146
|
+
|
147
|
+
if (x == this)
|
148
|
+
|
149
|
+
return true;
|
150
|
+
|
151
|
+
if (scale != xDec.scale)
|
152
|
+
|
153
|
+
return false;
|
154
|
+
|
155
|
+
long s = this.intCompact;
|
156
|
+
|
157
|
+
long xs = xDec.intCompact;
|
158
|
+
|
159
|
+
if (s != INFLATED) {
|
160
|
+
|
161
|
+
if (xs == INFLATED)
|
162
|
+
|
163
|
+
xs = compactValFor(xDec.intVal);
|
164
|
+
|
165
|
+
return xs == s;
|
166
|
+
|
167
|
+
} else if (xs != INFLATED)
|
168
|
+
|
169
|
+
return xs == compactValFor(this.intVal);
|
170
|
+
|
171
|
+
|
172
|
+
|
173
|
+
return this.inflated().equals(xDec.inflated());
|
174
|
+
|
175
|
+
}
|
176
|
+
|
177
|
+
|
178
|
+
|
179
|
+
```
|
180
|
+
|
181
|
+
Integerクラスも確認したところ、オブジェクト同士の確認もするが
|
182
|
+
|
183
|
+
Integerクラス同士のオブジェクトの比較の際には、中の値を比べてくれるコードが記述されていました。
|
184
|
+
|
185
|
+
|
186
|
+
|
187
|
+
なので、Integerクラスにおいて、オブジェクト同士が同値であるかどうか確認したい場合は
|
188
|
+
|
189
|
+
(Integerクラス内でオーバーライドした)equalメソッドを使う、で大丈夫だと思いました。
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
+
長々と申し訳ありません。皆様ありがとうございました。
|