我对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>
答案 0 :(得分:4)
this
指的是已调用same()
方法的实际实例。例如。请使用以下代码:
Calculate a = new Calculate(0, 3);
Calculate b = new Calculate(0, 4);
boolean calcFlag = a.same(b);
在这种情况下,方法this
中的same()
会引用a
而in
会引用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)
您在代码中遇到了多个问题:
this.
:this.
指的是您的类的当前实例(您所在的Calculate实例),而静态方法属于该类,而不是实例sumAddG()
称为属性成员(in.SumAddG
),这是错误的,因为SumAddG是一种方法。在您的示例中,如果您希望在自己的类实例中调用该方法,则可以使用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
。