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

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()) { // <-- 这就是我好奇的地方

你有一个布尔方法。在if您评估一个布尔表达式时,如果表达式本身为真,则返回一个布尔真值。这可以通过简单地编写来简化

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

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

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 回答
2

您的代码的当前状态(您的编辑很难遵循)按您可能预期的方式工作。

this指的是你所在的类的实例,所以this.sumAddG()'s result 使用上述字段的当前值。in.sumAddG()使用实例的字段in,它被指定为方法的参数same()

远程相关:

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

if (sumAddG() == in.sumAddG()) { ... }
于 2013-11-04T13:39:55.033 回答
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 回答