✈【【零基础 快速学Java】韩顺平 零基础30天学会Java】
class Dog{
public String name;
public int age;
public Dog(String dName , int dAge){
name = dName;
age = dAge;
}
public void info(){
System.out.println(name + "\t" + age + "\t");
}
}
问题:
构造方法中的输出参数名不是很好,如果能够将dName改成name就好了,但是发现按照变量的作用域原则,name的值就是null,如何解决?
【什么是this】
java虚拟机会给每个对象分配 this,代表当前对象。
举个栗子
/**
* ClassName: This01
* date: 2022/9/2 20:37
*
* @author DingJiaxiong
*/
public class This01 {
public static void main(String[] args) {
Dog dog1 = new Dog("大壮",3);
System.out.println("dog1的hashcode = " + dog1.hashCode());
dog1.info();
System.out.println("==========");
Dog dog2 = new Dog("大黄",2);
System.out.println("dog2的hashcode = " + dog2.hashCode());
dog2.info();
}
}
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 info(){
System.out.println("this.hashCode = " + this.hashCode());
System.out.println(name + "\t" + age + "\t");
}
}
运行结果
hashCode()
方法定义在Object类中,任何类都包含hashCode()
方法。hashCode()
方法的返回值是一个int整数,作用是获取哈希码
(散列码),用来确定该对象在哈希表
(散列表)中的索引位置。hashCode()
在哈希表
中才有用,在其他情况下没用。
从上面的例子中可以看到,每个对象的hashCode()的值都是一样的。
意思就是:哪个对象调用,this就代表了哪个对象。
韩老师图解:
定义 Person 类,里面有 name、age 属性,并提供 compareTo 比较方法,用于判断是否和另一个人相等,提供测试类 TestPerson用于测试, 名字和年龄完全一样,就返回 true, 否则返回 false
/**
* ClassName: TestPerson
* date: 2022/9/2 20:46
*
* @author DingJiaxiong
*/
public class TestPerson {
public static void main(String[] args) {
Person p1 = new Person("Mary", 20);
Person p2 = new Person("Mary",20);
System.out.println("p1和p2比较的结果" + p1.compareTo(p2));
}
}
class Person{
String name;
int age;
public Person(String name , int age){
this.name = name;
this.age = age;
}
//比较方法
public boolean compareTo(Person p){
return this.name.equals(p.name) && this.age == p.age;
}
}
运行结果