お世話になってます。
私の認識ではthisはメソッド内変数とフィールドを区別するために使用すると思っているのですが、あっているでしょうか?
それ以外はthisは余計でしょうか?
追記
「メソッドに付いているthisが不要である」ということが一番知りたかったので
maisumakunさんをベストアンサーにさせていただきました。
質問には記載していませんでした。すみません。
皆さんありがとうございました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答6件
0
ベストアンサー
ほかにthis
を使う場面としては、以下のようなものがあります。
- 他のメソッドへの引数や返り値など、何かへ与える値として
this
を使う場合 - コンストラクタから同じクラスの別なコンストラクタを呼ぶ時の
this(引数);
記法 - インナークラスから外部クラスを参照する場合の
外部クラス名.this
の記法
メソッドをthis.
付きで呼ぶこともできはしますが、特に意味はありません。
投稿2016/08/11 12:45
総合スコア146536
0
メソッド内で宣言した変数と
メソッド外で宣言した変数を使い分けるために
thisを使いますので大体、ご認識は正しいと
思います。
具体的には
thisを付けない:メソッドで宣言した変数
thisを付ける :クラスで宣言した変数
使用例も含めてこのサイトに書かれていますので
確認のために一読されてはいかがでしょうか?
投稿2016/08/31 15:19
総合スコア1630
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
メソッド内変数とフィールドを区別するために使用すると思っているのですが、あっているでしょうか?
それだけではないですが、あっています。
例えば、クラスが入れ子になった場合にはつけないといけない場合があります。
これはちょっと難しい話なのでここでは省かせていただきます。
あとはコーディングスタイルの問題かと。
私は冗長だと思うのであまりつけません。
メソッドはたぶん必ず付けません。
フィールドは、setterの場合は変数名が被るので付けます。これは変数名が被らないように名前を変えるより明快だと思うからです。名前に_
をつけるスタイルがありますが、私は好きじゃないです。
あとは、コンストラクターでフィールドを初期化する際にもつけます。
要は、フィールドへの代入の場合は付けるようにしています。
投稿2016/08/11 12:42
編集2016/08/11 12:45総合スコア9396
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
thisの他の用途は他の人の回答が参考になります。
変数に限って言えば、そのような理解で問題ないでしょう。
例えば以下のような場合
Java
1public class Sample { 2 3 private String str = "instance"; 4 5 private void foo() { 6 System.out.println(str); 7 } 8}
fooを呼ぶと当然 instance と表示されるわけですが、
以下のようにこのコードを他の人が不用意に手を加えてしまった場合
Java
1public class Sample { 2 3 private String str = "instance"; 4 5 private void foo() { 6 String str = "local"; 7 System.out.println(str); 8 } 9}
local と表示されるようになってしまい、最初の実装者の意図に反します。
なので、フィールドを見たい場合は this をつけておいた方が安全と言えば安全なので、
僕はけっこう this はつけます。
このコードは短いのでこんなことあり得ないと思うかもしれませんが、
本格的なコードになってきた場合、何も考えずに他人のコードをさわっていると、
こういうことが起きたりします。
かぶるような適当な変数名を使っていなければ、そうそう起きないとは思いますが、
たまに理解の限界を超える行為を平気でしてくる技術者もいるので、チーム開発は怖いです。。。
投稿2016/08/12 01:37
総合スコア4666
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
thisは自分自身のオブジェクトを指します。
相手に、そのクラスのオブジェクトを渡すときにも使います。
java
1TextView text = new TextView(this);
上の例はAndroidで、自クラスのオブジェクトを外部が生成してメソッドを呼び出すのでこのような形が必須になります。
また、コンストラクタなどでメンバ変数に値を設定する際にわざと同じ名前にしてミスを防ぐというのはよく使われます。
java
1class A{ 2 int i; 3 String str; 4 A(int i, String str){ 5 this.i = i; 6 this.str = str; 7 } 8}
投稿2016/08/11 13:01
総合スコア868
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
大体の場合におけるthisの使い方は他の回答者から出ているので、ほかの使い方としては…
equalsやcompareToの様に、引数に自分と同じ型が来て、それぞれの同名のメンバを参照する際に、どっちがどっちかを明示する目的で付けることはあります。
java
1public boolean equals(Object o) { 2 // 型などの条件判断略 3 Type anObj = (Type)o; 4 return this.str.equals(anObj.str); 5}
投稿2016/09/01 01:20
総合スコア20675
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/08/11 13:08 編集
2016/08/31 15:07