7

発言について質問this.です。ここにこのコードがあるとしましょう(非常に愚かで役に立たないが、メッセージを伝えます):

class Calculate{
int x,y;
final int g = 5;

   //Constructor
   public Calculate(int a, int b) {
      x = a; y = b;
   }

   public int sumAddG() {
     return (x+y+g);
   }

   //comparing method
   public boolean same(Calculate in) {
     if(this.sumAddG() == in.sumAddG()) { // <-- This is what I am curious about
       return true;
     } else {
       return false;
   }
}

それで、私はこのコードを正しく持っていますか?私が使用している場合 -クラスインスタンスのインスタンス変数this.SumAddG()使用してメソッド SumAddG() の結果を参照していますか?this

4

6 に答える 6

4

thissame()メソッドが呼び出された実際のインスタンスを参照します。例えば。次のコードを使用します。

Calculate a = new Calculate(0, 3);
Calculate b = new Calculate(0, 4);
boolean calcFlag = a.same(b);

この場合、thisメソッド内のsame()は を参照しainは を参照しbます。

この行の更新: if(this.sumAddG() == in.sumAddG()) { // <-- これは私が興味を持っていることです

あなたはブールメソッドを持っています。ブール式を評価していて、if式自体が true の場合はブール値 true を返します。これは、次のように書くだけで簡単にできます。

return this.sumAddG() == in.sumAddG();

これは、2 つのインスタンスの同等性の評価を直接返します。一般に、ブール値メソッドの場合、戻り行で式を評価し、式を評価することをお勧めします。

if (<*any boolean expression*>) {
  return true;
} else {
  return false;
}

構造は悪い習慣と見なされます。

于 2013-11-04T13:17:48.443 に答える
3

コードに複数の問題があります:

  1. this.静的メソッドで使用しています:this.クラスの現在のインスタンス (現在の Calculate インスタンス) を参照し、静的メソッドはインスタンスではなくクラスに属します
  2. sumAddG()プロパティ メンバー ( ) として参照していますin.SumAddGが、SumAddG はメソッドであるため、これは誤りです。

あなたの例ではthis.、独自のクラスインスタンスでメソッドを呼び出したい場合に使用しますが、別のインスタンスinで呼び出したい場合は、それを として呼び出しますin.sumAddG()

静的メソッドではthis、静的メンバーはインスタンスに属しておらず、クラスに属しているため、使用できthisません。現在のインスタンスが存在しないため、 が認識されません。

ただし、同じクラスにメソッドがあり、静的メソッドから呼び出したい場合は、他のメソッドも静的である必要があり、次のように呼び出すことができますCalculate.MyStaticMethod()

メソッドが静的でない場合、this.sumAddG() == in.sumAddG()実際にsumAddG()は、インスタンスでの呼び出しからの戻り値とインスタンスでの戻り値を比較sumAddG()inます。

于 2013-11-04T13:26:28.120 に答える
1

thisキーワードは、それを使用しているクラスのインスタンスを参照します。

あなたが示しthis.sumAddG()た例では、クラスCalculateのインスタンスのメソッドを参照しています。クラスインスタンスを参照しているためthis、静的コンテキストからは使用できません。

于 2013-11-04T13:23:44.910 に答える
1

キーワードは、thisあなたがいる現在のクラスを参照します。したがって、あなたが書いたその例のクラスでは、インスタンス変数を宣言する場合、計算します。次に、IF ステートメント条件で、 this キーワードをその前に置くことでそれを参照します。 : this.in を呼び出すだけでメソッドのパラメーターを参照できます: in

于 2013-11-04T13:18:55.030 に答える
1

this常にクラス インスタンスを参照します。 this.method()戻り値とは関係ありません。一部のメソッドには、返す値がありません。

つまり、このクラス インスタンス メンバー メソッドをコンパイラで呼び出してください。

于 2013-11-04T13:21:27.543 に答える