我知道这是指一个当前对象。但是我不知道什么时候我真的需要使用它。例如,如果我用x代替这个,会有什么不同吗。X在某些方法中?可能x将是指一个变量,这是局部的考虑方法?我指的是只有在这个方法中才能看到的变量。

那么this.method()呢?我能用吗?我应该用它吗?如果我只是使用方法(),它不是,默认情况下,应用到当前对象?


当前回答

这是对当前对象的引用。它在构造函数中用于区分具有相同名称的局部类变量和当前类变量。例如:

public class circle {
    int x;
    circle(int x){
        this.x =x;
        //class variable =local variable 
    }
} 

这也可以用于从另一个构造函数调用一个构造函数。例如:

public class circle {
    int x;

    circle() { 
        this(1);
    }

    circle(int x) {
        this.x = x; 
    }
}

其他回答

唯一需要用的就是这个。当当前作用域内的另一个变量具有相同的名称并且您希望引用实例成员时(如William所描述的那样),则使用qualifier。除此之外,x和这个。x在行为上没有区别。

除非你有重叠的变量名,这只是为了在你阅读代码时清晰。

如果我用“x”而不是“this”会有什么不同吗?X "在某些方法中?

通常不会。但有时也会有所不同:

  class A {
     private int i;
     public A(int i) {
        this.i = i; // this.i can be used to disambiguate the i being referred to
     }
  }

如果我只是使用“method()”,它会不会被默认应用到当前对象?

是的。但是如果需要的话,this.method()会澄清调用是由这个对象进行的。

谷歌在太阳网站上有一个页面讨论了这个问题。

关于变量你是对的;这确实可以用来区分方法变量和类字段。 私有int x; setX(int x) { this.x = x; }

然而,我真的很讨厌这种惯例。给两个不同的变量取完全相同的名字是产生错误的原因。我更喜欢这样的东西: 私有int x; setX(int newX) { x = newX; }

相同的结果,但不会出现错误,即您不小心引用了x,而实际上应该引用x。

至于用一种方法来使用它,你说的效果是对的;不管有没有它,你都会得到相同的结果。你会用吗?确定。你应该使用它吗?由您决定,但考虑到我个人认为这是毫无意义的冗长,不会增加任何清晰度(除非代码充满了静态导入语句),我自己不倾向于使用它。

只有当存在同名重叠的局部变量时才需要使用它——而且大多数人只使用它。(例如,Setter方法。)

当然,使用它的另一个很好的理由是它会在ide中弹出智能感知:)