回答編集履歴

1

他の使用例

2017/05/24 00:48

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -1,5 +1,67 @@
1
1
  `this`は**このインスタンス**を意味するキーワードです。
2
2
 
3
- 例えばコンストラクタでは、フィールドと引数に同じ変数名aが使われていますが、
3
+ 例えばコンストラクタ(1,3,5,7が該当)では、フィールドと引数に同じ変数名aが使われていますが、
4
4
 
5
5
  `this.a`とすることでインスタンスのフィールドであることを明示的に示せます。
6
+
7
+
8
+
9
+ それ以外のthisも「このインスタンス自身」を指し、これに続いて`.フィールド`や`.メソッド()`が続くことで、「このインスタンス自身のフィールドやメソッド」であることを明示的に示しますが、こういう場所で書いてもさほど意味がありません。thisなしでも同じ意味を示しますので。
10
+
11
+
12
+
13
+ ではどういうときに使うか?それは、引数に同じクラスの別のインスタンスが入るような状況です。具体的には
14
+
15
+ - equals
16
+
17
+ 引数にオブジェクトを取り、そのオブジェクトが自分と等しいか判定するメソッド
18
+
19
+ 基本的にオブジェクト内のフィールドが同じ値かを比較するが、下記のように同名のフィールドを比較することになるため、明確に「このオブジェクトのフィールド」であることを示すためにthisをつけることがある
20
+
21
+ ```java
22
+
23
+ //ClassA内のメソッドとして説明
24
+
25
+ public boolean equals(Object o) {
26
+
27
+ //instanceofなどの判定が入るがここでは本質ではないため省略
28
+
29
+ ClassA x = (ClassA)o;
30
+
31
+ return this.a == x.a;
32
+
33
+ }
34
+
35
+ ```
36
+
37
+
38
+
39
+ - ComparableインタフェースのcompareTo
40
+
41
+ 引数に自分と同じ型のオブジェクトを取り、自分と引数どちらが小さいか(順番に並べるとき、どちらが先に並ぶか)を判定するメソッド
42
+
43
+ これも多くは同じ名前のフィールドを比較するため、thisで違いを明確化する際に使うことがある
44
+
45
+ ```java
46
+
47
+ //同じくClassAのメソッドとして説明
48
+
49
+ public int compareTo(ClassA another) {
50
+
51
+ if (this.a < another.a) {
52
+
53
+ return -1;
54
+
55
+ } else if (this.a > another.a) {
56
+
57
+ return 1;
58
+
59
+ } else {
60
+
61
+ return 0;
62
+
63
+ }
64
+
65
+ }
66
+
67
+ ```