在Java中,当方法参数名与成员变量名相同时,需用this关键字区分二者,否则参数会遮蔽成员变量导致赋值失效;常见于构造方法赋值、setter方法、构造器链和链式调用。

在 Java 中,当方法参数名与类的成员变量名相同时,可以用 this 关键字明确指代当前对象的成员变量,避免歧义。
为什么需要 this 来区分同名变量
构造方法或 setter 方法中,经常把参数名设成和成员变量一样(比如都叫 name),这样写起来直观。但如果不加限定,编译器默认使用的是参数,成员变量反而被“遮蔽”了。这时 this.name 就表示“当前对象的 name 成员”,而 name 单独出现就是参数。
常见用法场景
- 构造方法赋值:用 this.field = field 把参数值赋给成员变量
- setter 方法:比如 public void setName(String name) { this.name = name; }
- 调用当前类的其他构造方法:用 this(...) 放在第一行(构造器链)
- 返回当前对象引用:支持链式调用,如 return this;
不加 this 会怎样
如果参数和成员变量同名却没写 this,赋值语句 name = name 实际是把参数赋给自己,成员变量根本没被修改。程序逻辑出错,但编译不会报错——这是典型的静默错误,容易遗漏。
一个简洁示例
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name; // this.name 是成员,name 是参数
this.age = age; // 同理
}
}


















