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
答案 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)
在这种情况下,您不需要明确说明e
是this.
实例的字段之一,因为在当前范围内没有其他变量称为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.