1.this关键字
深入理解this
public class This01 {
public static void main(String[] args) {
Dog dog = new Dog("Tom", 10);
System.out.println("dog的hashcode = " + dog.hashCode());
// dog.ac();
}
}
class Dog {
String name;
int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
System.out.println("this.hashcode = " + this.hashCode());
}
public void ac() {
System.out.print("name = " + name + " age = " + age);
}
}
调用hashCode方法,查看this和dog对象的地址
如果是两个对象,则会对应不同的地址
public class This01 {
public static void main(String[] args) {
Dog dog = new Dog("Tom", 10);
System.out.println("dog的hashcode = " + dog.hashCode());
Dog dog2 = new Dog("Jack", 8);
System.out.println("dog2的hashcode = " + dog2.hashCode());
// dog.ac();
}
}
class Dog {
String name;
int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
System.out.println("this.hashcode = " + this.hashCode());
}
public void ac() {
System.out.print("name = " + name + " age = " + age);
}
}
小结:简单来说,哪个对象调用,this就代表哪个对象
this使用细节和注意事项
- this关键字可以用来访问本类的属性、方法、构造器
- this用于区分当前类的属性和局部变量
- 访问成员方法的语法:this.方法名(参数列表)
- 访问构造器语法:this(参数列表)注意只能在构造器中使用(即只能在构造器中访问另外一个构造器,必须放在第一条语句)
- this不能在类定义的外部使用,只能在类定义的方法中使用
this关键字练习
/*
定义Person类,里面有name age属性 并提供compareTo比较方法
用于判断是否和另一个人相等,提供测试类TestPerson用于测试 名字
和年龄完全一样,就返回true 否则返回false
*/
public class TestPerson {
public static void main(String[] args) {
Person p = new Person("logic", 18);//定义第一个对象的初始化属性
Person p2 = new Person("alice", 18);//定义第二个对象的初始化属性
//比较两个对象的属性是否相同
System.out.println("p和p2的比较结果 = " + p.compareTo(p2));
}
}
//定义一个Person类
class Person {
String name;
int age;
//创建一个构造器
public Person(String name, int age) {
this.name = name;
this.age = age;
}
//创建一个比较方法
public boolean compareTo(Person p) {
// if (this.name.equals(name) && this.age == age) {
// return true;
// } else {
// return false;
// }
//直接返回比较结果是真还是假
return this.name.equals(p.name) && this.age == p.age;
}
}