前面小节中,类在定义成员方法时,局部变量和成员变量可以重名,但此时不能访问成员变量。为避免这种情形,Java提供了this关键字,表示当前对象,指向调用的对象本身。接下来演示this的本质,如例4-1所示。
例4-1 TestThis.java
1 class Person {
2 public void equals(Person p) {
3 System.out.println(this); // 打印this的地址
4 System.out.println§; // 打印对象地址
5 if (this == p) // 判断当前对象与this是否相等
6 System.out.println(“相等”);
7 else
8 System.out.println(“不相等”);
9 }
10 }
11 public class TestThis {
12 public static void main(String[] args) {
13 Person p1 = new Person();
14 Person p2 = new Person();
15 p1.equals(p1);
16 p1.equals(p2);
17 }
18 }
程序的运行结果如图4.1所示。
图4.1 例4-1运行结果
在图4.1中,从程序运行结果可发现,关键字this和调用对象p1的值相等,都保存了指向堆内存空间的地址,也就是说,this就是调用对象本身。因此,调用对象p1的this与p2对象不相等。
this关键字在程序中主要有三种用法,下面来分别讲解各种用法:
1.使用this调用类中的属性
this关键字可以明确调用类的成员变量,不会与局部变量名发生冲突。接下来演示this调用属性,如例4-2所示。
例4-2 TestThisRefAttr.java
1 class Person {
2 private String name;