使用此运算符设置私有变量与正常分配之间的区别是什么

时间:2014-12-03 23:44:33

标签: java

public class MyClass {

    private char e; 

    public void intializeVariable(char z) {
       this.e = z;
    }
     public void intializeVariableWithoutThis(char z) {
       e = z;
    }

    public static void main(String[] args) {
    MyClass mC =  new MyClass();
        System.out.println(mC.e);
        mC.intializeVariable('m');
        System.out.println(mC.e);
        mC.intializeVariableWithoutThis('n');
        System.out.println(mC.e);
    }

}

方法initializeVariable和initailizeVariableWithout这是做同样的事我只是想了解使用this.e = z设置值的区别是什么,只是做e = z

5 个答案:

答案 0 :(得分:4)

这用于表示当前对象的字段。

public void intializeVariable(char z) {
   this.e = z;
}

如果您将上述方法更改为

 public void intializeVariable(char e) {
   this.e = e;
}

这将正常工作。编译器会知道" e"是参数,this.e是对象的字段。

答案 1 :(得分:3)

对于您的示例,没有区别,因为每个人都将z分配给e

如果参数的名称与实例变量的名称相同,则只会产生差异,例如:两者都被命名为e

public void initializeVariableSameName(char e){
    this.e = e;
}

在这种情况下,e引用参数e而不是实例变量e。它会影响实例变量e。这意味着访问实例变量的唯一方法是使用this对其进行限定,例如this.e

另一种情况:

    e = e;

会将参数e分配给自己;没用。

答案 2 :(得分:2)

没有区别,但如果您使用与类变量同名的参数,那么您必须使用键盘

public void intializeVariable(char e) {
   this.e = e;
}

答案 3 :(得分:1)

在这种情况下,您不需要明确说明ethis.实例的字段之一,因为在当前范围内没有其他变量称为e所以您可以跳过this.部分(它将由编译器自动添加)。但是如果您的方法签名看起来像

public void intializeVariable(char e) {
    ..
}

并且您希望将传递为e参数的值分配给 field e,您需要将其写为

this.e = e; 
//   ^   ^-- methods local variable
//   |
//   +------ field 

答案 4 :(得分:0)

引用oracle docs 使用this关键字的最常见原因是因为字段被方法或构造函数参数遮蔽。

public class Point {
    public int x = 0;
    public int y = 0;

    //constructor
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

Each argument to the constructor shadows one of the object's fields — inside the constructor x is a local copy of the constructor's first argument. To refer to the Point field x, the constructor must use this.x.