发布于2026-07-04 阅读(0)
扫一扫,手机访问
在 Ja va 开发中,参数与成员变量同名的情况并不罕见,但恰恰是这个小细节,常常让初学者栽跟头。你可能会想:直接赋值不就行了?结果却往往出乎意料——属性根本没被修改,依旧保持默认的 null 或 0。问题的根源在于 Ja va 的作用域优先级规则,而解决它的方法只有一个:用 this 明确指向当前对象的属性。

Ja va 在局部作用域内会优先使用同名的参数或局部变量。也就是说,当你写出 name = name; 这样的赋值语句时,左右两边的 name 都是指方法参数——而不是类的属性。最终结果是参数给自己赋了个值,属性纹丝不动,仍然保留默认值(null 或 0)。这等于什么都没干。
this.——告诉编译器要操作当前对象的成员变量this.——表示读取传入的参数值setter 方法中看一个实际例子:
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name; // ✅ 正确:this.name 是属性,name 是参数
this.age = age; // ✅ 正确
}
public void setName(String name) {
this.name = name; // ✅ 正确
}
public void setAge(int age) {
this.age = age; // ✅ 正确
}
}
this.,导致属性未被初始化,运行时出现 null 或 0 的意外结果this.name = this.name;,逻辑上完全无意义,等于给自己赋值static 方法里使用 this —— 编译会直接报错,因为 this 只属于实例上下文即便参数名和属性名没有冲突,显式加上 this.name 也能增强代码的可读性,让人一眼看出这是在操作当前对象的属性。当然这不是强制要求;但当命名冲突出现时,this 就是必须的救星。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8