回答編集履歴
5
Stringについて説明更新
test
CHANGED
@@ -20,4 +20,21 @@
|
|
20
20
|
> 個別のオブジェクトに対して個別の整数を返します。
|
21
21
|
|
22
22
|
が成立します。
|
23
|
+
(それ以外の場合、成立するかもしれませんが、成立しないかもしれません(そもそも"hash"の名の通り、一般的には成立しないと考えるべきです)。)
|
24
|
+
|
25
|
+
また、今回の質問の本題である `String` についていうと、成立しません。
|
23
|
-
|
26
|
+
[`hashCode()` APIドキュメント](https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/lang/String.html#hashCode()) を見ると分かる通り、文字列の内容から値を算出しているので、前述したアドレス相当である "オブジェクトID" が異なるものも同じ値になります。
|
27
|
+
|
28
|
+
```java
|
29
|
+
final String str1 = "すとりんぐ1";
|
30
|
+
final String str2 = "すとりんぐ1";
|
31
|
+
final String str3 = new String("すとりんぐ1");
|
32
|
+
final String str4 = str3.intern();
|
33
|
+
|
34
|
+
assert str1 == str2;
|
35
|
+
assert str1 != str3;
|
36
|
+
assert str1 == str4;
|
37
|
+
|
38
|
+
// 異なるオブジェクトでも同じ文字列なので hashCode() 値は同一
|
39
|
+
assert str1.hashCode() == str3.hashCode();
|
40
|
+
```
|
4
質問の本題である String について追記
test
CHANGED
@@ -20,4 +20,4 @@
|
|
20
20
|
> 個別のオブジェクトに対して個別の整数を返します。
|
21
21
|
|
22
22
|
が成立します。
|
23
|
-
(それ以外
|
23
|
+
(それ以外の場合、成立するかもしれませんが、成立しないかもしれません("hash"の名の通り、一般的には成立しないと考えるべきです)。例: [`String` の `hashCode()` 実装](https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/lang/String.html#hashCode()))
|
3
追記に回答
test
CHANGED
@@ -2,3 +2,22 @@
|
|
2
2
|
コード中では[オブジェクト同士の `==` や `!=`](https://docs.oracle.com/javase/specs/jls/se17/html/jls-15.html#jls-15.21.3) で評価できます。
|
3
3
|
|
4
4
|

|
5
|
+
|
6
|
+
----
|
7
|
+
> アドレスを取得する方法は存在しない。
|
8
|
+
|
9
|
+
正しいです。
|
10
|
+
|
11
|
+
> 変数が参照しているアドレスが同じか異なっているかを確認する方法として、 hashCodeメソッドを使う方法がある。 hashCodeメソッドの戻り値は、オブジェクトのアドレスを利用して生成されるため、 インスタンスが異なれば、hashCodeメソッドの戻り値も異なる。
|
12
|
+
|
13
|
+
間違っています。
|
14
|
+
[APIドキュメント](https://docs.oracle.com/javase/jp/17/docs/api/java.base/java/lang/Object.html#hashCode())を参照してください。
|
15
|
+
|
16
|
+
> クラスObjectによって定義されたhashCodeメソッド
|
17
|
+
|
18
|
+
に限って
|
19
|
+
|
20
|
+
> 個別のオブジェクトに対して個別の整数を返します。
|
21
|
+
|
22
|
+
が成立します。
|
23
|
+
(それ以外は成立するかもしれないし、成立しないかもしれません。)
|
2
使用単語の修正
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
アドレス値に相当するものはVariablesペインに表示される `id`(オブジェクトID)です(下図破線枠参照)。
|
2
2
|
コード中では[オブジェクト同士の `==` や `!=`](https://docs.oracle.com/javase/specs/jls/se17/html/jls-15.html#jls-15.21.3) で評価できます。
|
3
3
|
|
4
4
|

|
1
キャプチャ更新(intern()を含める)
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
ポインタ値に相当するものはVariablesペインに表示される `id`(オブジェクトID)です(下図破線枠参照)。
|
2
2
|
コード中では[オブジェクト同士の `==` や `!=`](https://docs.oracle.com/javase/specs/jls/se17/html/jls-15.html#jls-15.21.3) で評価できます。
|
3
3
|
|
4
|
-

|