1 不加this,变量和构造函数参数同名
public class Cat {
int a = 5;
//构造函数
public Cat(int a){
a = a;
}
}
Cat c = new Cat(4);
System.out.println(c.a);// 5
这种情况下c对象中变量a的值是5,而不是我们想要的4。
类的变量名是a,构造函数中形参名也是a,当形参名和成员变量名重名时,就会覆盖成员变量名。于是等号左边和右边的两个a都代表的是形式参数,给成员变量再赋值失败。
2 不加this,变量和构造函数参数不同名
public class Cat {
int a = 5;
//构造函数
public Cat(int b){
a = b;
}
}
Cat c = new Cat(4);
System.out.println(c.a);// 4
这种情况下c对象中变量a的值就是我们想要的4了。
类的成员变量名是a,构造函数中形参名是b,这时c对象在调用构造函数时,能够区分哪个是成员变量,哪个是参数,构造函数拿到传过来的参数4就赋值给了成员变量a。
3 加this,变量和构造函数参数同名
public class Cat {
int a = 5;
//构造函数
public Cat(int a){
this.a = a;
}
}
Cat c = new Cat(4);
System.out.println(c.a);// 4
这种情况下c对象中变量a的值也是我们想要的4。
this表示对当前对象的引用,同时也区分了成员变量a与形参a,这时构造函数拿到传过来的参数4就赋值给了成员变量a。