this.method()是指?

时间:2013-11-04 13:13:22

标签: java this

我对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()时 - 我是否使用 this 类实例的实例变量来引用SumAddG()方法的结果?< / p>

6 个答案:

答案 0 :(得分:4)

this指的是已调用same()方法的实际实例。例如。请使用以下代码:

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()){//&lt; - 这是我很好奇的事情

你有一个布尔方法。在if中,您正在评估布尔表达式,如果表达式本身为真,则返回布尔值true。只需编写

即可简化此操作
return this.sumAddG() == in.sumAddG();

这将直接返回对两个实例的相等性的评估。通常,在布尔方法的情况下,在返回行中评估表达式,同时在

中对其进行评估时,这被认为是一种很好的做法。
if (<*any boolean expression*>) {
  return true;
} else {
  return false;
}

结构被认为是不好的做法。

答案 1 :(得分:3)

您在代码中遇到了多个问题:

  1. 您在静态方法中使用this.this.指的是您的类的当前实例(您所在的Calculate实例),而静态方法属于该类,而不是实例
  2. 您将sumAddG()称为属性成员(in.SumAddG),这是错误的,因为SumAddG是一种方法。
  3. 在您的示例中,如果您希望在自己的类实例中调用该方法,则可以使用this.,但如果您希望在另一个实例in上调用它,则可以将其称为in.sumAddG()

    在静态方法中,您不能使用this,因为静态成员不属于某个实例,它属于该类,因此无法识别this,因为当前实例不存在

    但是,如果你在同一个类中有一个方法并且你想从静态方法调用它,那么另一个方法也必须是静态的,你可以将其称为:Calculate.MyStaticMethod()

    如果您的方法不是静态的,那么this.sumAddG() == in.sumAddG()实际上会比较您实例中调用sumAddG()sumAddG()实例上的in的返回值。

答案 2 :(得分:2)

您的代码的当前状态(您的编辑很难遵循)可能会像您预期的那样发挥作用。

this指的是您所在班级的实例,因此this.sumAddG()的结果使用上述字段的当前值。 in.sumAddG()使用实例in的字段,该字段被指定为方法same()的参数。

远程相关:

仅供参考,这里不需要使用this,因为它是普通电话sumAddG()的默认行为。这意味着您的if声明可能是:

if (sumAddG() == in.sumAddG()) { ... }

答案 3 :(得分:1)

this关键字指的是您当前所在的班级。 因此,在您编写的示例类中,如果您声明了一个实例变量,则计算输入。然后在IF语句条件中,您可以通过将this关键字放在它前面来引用它:this.in 并通过调用以下方法来引用方法的参数: 在

答案 4 :(得分:1)

this始终引用类实例this.method()与返回值无关。某些方法没有值返回。

  

意思是:请编译这个类实例的元化方法   我

答案 5 :(得分:1)

this关键字是指您正在使用它的类的实例。

在您显示的示例中,this.sumAddG()将引用类Calculate实例的方法。由于您指的是类实例,因此无法在静态上下文中使用this