JAVA学习*Object类
Object类
Object类是所有类的父类
类中有一些方法(都需要掌握)
toString()方法
在学习类的对象的时候有介绍过了,当我们重新给此方法就会打印类与对象的信息
equals()方法
在Java中的比较,
如果==左右两侧是基本类型变量,比较的是变量中值是否相同。
如果==左右两侧是引用类型变量,比较的是引用变量地址是否相同。
如果要比较引用类型指向的值相同,需要重写equals()方法。
代码展示:
import java.util.Objects;
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Test {
public static void main(String[] args) {
Student stu1 = new Student("lisi",18);
Student stu2 = new Student("lisi",18);
System.out.println(stu1 == stu2);
System.out.println(stu1.equals(stu2));
System.out.println("----------");
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
}
}
输出:
false
flase
----------
false
true
代码解释:
1、对于对象,== 比较的是引用,即是否指向同一内存地址。Student是类stu1和stu2是引用变量,分别引用 Student 类创建的对象。
2、用equals()方法,当没有重写equals()方法时,调用父类Object类的equals()方法,比较的是两个地址是否相同,而非指向的内容是否相同。
3、为了能比较指向的内容是否相同,需要重写equals()方法。
(可以借助编译器生成)
@Override
//进行了比较合理性的判断
public boolean equals(Object o) {
if (this == o) return true;//自己比自己
if (o == null || getClass() != o.getClass()) return false;//为空和类型不相同,返回false
Student student = (Student) o;
return age == student.age && Objects.equals(name, student.name);
}
此时之前的输出结果发生变化
输出:
false
true
----------
false
true
4、为什么String类的equals()方法比较的是指向的内容?因为String本身已经重写了equals()方法。
hashCode()方法
源码:
public native int hashCode();
我们认为两个名字相同,年龄相同的对象,将存储在同⼀个位置。当没有重写hashCode()方法时,他们的hash值不相同。
我们需要重写hashCode()方法。
(可以借助编译器生成)
@Override
public int hashCode() {
return Objects.hash(name, age);
}
其他关于hashCode()方法知识后续在讲。
其他方法之后学习中介绍
总结
对于我们自定义的类时,我们最好通过编译器重写toString()方法、equals()方法等。