Java 此.method()正在引用?

Java 此.method()正在引用?,java,this,Java,This,我有一个关于的问题。声明。 假设我这里有一段代码(非常愚蠢和无用,但能传达信息): 类计算{ int x,y; 最终整数g=5; //建造师 公共计算(整数a、整数b){ x=a;y=b; } 公共int sumAddG(){ 返回(x+y+g); } //比较法 公共布尔值相同(在中计算){ 如果(this.sumAddG()==in.sumAddG()){/,则此引用已调用其same()方法的实际实例。例如,获取以下代码: Calculate a = new Calculate(0, 3);

我有一个关于
的问题。
声明。 假设我这里有一段代码(非常愚蠢和无用,但能传达信息):

类计算{
int x,y;
最终整数g=5;
//建造师
公共计算(整数a、整数b){
x=a;y=b;
}
公共int sumAddG(){
返回(x+y+g);
}
//比较法
公共布尔值相同(在中计算){

如果(this.sumAddG()==in.sumAddG()){/
,则此
引用已调用其
same()
方法的实际实例。例如,获取以下代码:

Calculate a = new Calculate(0, 3);
Calculate b = new Calculate(0, 4);
boolean calcFlag = a.same(b);
在这种情况下,方法
same()
中的
this
将指
a
,而
中的
将指
b

此行的更新:
如果(this.sumAddG()。 因此,在您编写的示例类中,如果您声明了一个实例变量,则计算in。然后在if语句条件中,您可以通过将this关键字放在前面来引用它,如:this.in 并通过调用引用方法的参数:

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

它的意思是:请编译器调用这个类实例成员方法 我


this
关键字引用了您正在使用它的类的实例


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

代码中存在多个问题:

  • 您正在静态方法中使用
    this。
    this。
  • 指的是类的当前实例(您所在的计算实例),而静态方法属于类,而不是实例
  • 您将
    sumAddG()
    引用为属性成员(
    in.sumAddG
    ),这是错误的,因为sumAddG是一个方法
  • 在您的示例中,如果您希望在自己的类实例中调用该方法,那么可以使用
    this.
    ,但是如果您希望在
    中的另一个实例
    上调用该方法,那么您可以在.sumAddG()中将其称为

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

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


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

    代码的当前状态(您的编辑很难遵循)如您所料


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

    远程相关:

    仅供参考,此处不需要使用
    this
    ,因为它是普通调用
    sumAddG()
    的默认行为。这意味着您的
    if
    语句可以是:

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

    您不能在静态上下文中使用
    this
    关键字。这将导致编译错误。好的,现在删除静态^^Now?只有一个参数的静态比较方法没有多大意义…aaaaaaaa!>。same
    更改为以下内容:
    公共布尔相同(计算中){返回this.sumAddG()==in.sumAddG();}
    因此,如果我想引用使用该类当前实例中的变量的方法的计算,只需编写if(Calculate.sumAddG()==in.sumAddG()){then}…?
    Calculate
    是类的名称,其中
    a
    是一个实例,
    b
    是另一个实例。由于
    sumAddG()
    不是静态的,因此不能调用
    Calculate.sumAddG()
    ,只能调用
    a.sumAddG()
    b.sumAddG()
    (或
    this.sumAddG()
    中的
    )< /代码>分别在“代码> SAME()/代码>的方法体内。将不同的实例视为不同的接口的起源。如果调用<代码> A.(B),在代码< > SAME()>代码> >代码> < <代码> > < <代码> < <代码> > <代码> > <代码> b>代码>。但是,如果调用“代码> >同一(a))
    b
    将由
    这个
    引用,而
    a
    将由
    中的
    引用。因此,给定上述代码,如果我键入:a.same(b);我将a与b进行比较,其中b.same(a)我将b与a进行比较,(实际上相同,但幕后的事情与此不同。实现正确吗?)是的,这是正确的。通常,这就是为什么
    equals()
    对象的
    method
    被重写,以声明两个对象在语义上是相等的。噢,这就是equals()的原因方法:D非常感谢!^^^因此,如果我想引用这个类的当前实例中使用变量的方法的计算,只需编写if(Calculate.sumAddG()==in.sumAddG()){then}…?使用Calculate.sumAddG()除非类calculate是静态的,否则将无法工作。如果要从类外部调用该方法,则可以创建该类的实例。据我所见,没有静态方法的更新代码应该可以工作,但我还没有测试
    return this.sumAddG() == in.sumAddG();
    
    if (<*any boolean expression*>) {
      return true;
    } else {
      return false;
    }
    
    if (sumAddG() == in.sumAddG()) { ... }