this关键字的作用是区分局部变量和成员变量,本质代表的是方法调用者的地址值.
什么是地址值?
在Java中,有基本数据类型,和引用数据类型
我们先看以下的代码:
public static void main(String[] args) {
Student stu = new Student();
}
创建了一个学生对象,该对象有一个完整的JavaBean类(此处略),当执行到这段代码时,Java会在栈内存创建一个 stu 的变量,而在堆内存中创建该对象的地址值,此时会把堆内存里的地址值赋值给栈内存的 stu.
public static void main(String[] args) {
Student stu = new Student();
stu.setName("zhangsan");
}
public void setName(String name) {
this.name = name;
}
如果调用setName方法给name赋值,由于this代表的是方法调用者的地址值,所以this代表的是stu的地址值,this.name代表的是堆内存中Student对象里面的name,而name触发了就近原则,代表的是形参里的name.