Obj类
首先我们要认识到
Object类是我们所有类的顶层父类,所有类都是直接或者间接的继承自他
我们可以将它new出来也就是格式
Object obj = new Object();
我们罗列出来objct类的常用方法然后再一一介绍
方法名 |
object调用方法 |
hashCode |
obj.hashCode() |
getClass |
obj.getClass() |
toString |
obj.toString |
equals |
obj.equals(obj2) |
clone() |
obj.clone |
首先我们先来看hashCode方法
public static void main(String[] args) {
Object obj = new Object();
int i = obj.hashCode();
System.out.println(i);
}
输出结果是 356573597
//这个不是一个什么固定的数字,这个代表他把i的地址值整数化了
//所以说haskCode的作用是把对象的地址值换算成一个整数
接下来看equals方法
public static void main(String[] args) {
Object obj = new Object();
Object obj2 = new Object();
boolean equals = obj.equals(obj2);//调用equals方法
System.out.println(equals);
}
//输出结果是false,因为equals比较的是两个地址值是否相等,返回值是波尔
//类型
接下来看getClass方法
public static void main(String[] args) {
Student student1 = new Student("张三", 23);
Student student2 = new Student("张三", 23);
Class aClass = student1.getClass();
Class aClass1 = student2.getClass();
System.out.println(aClass == aClass1);//输出是true
System.out.println(student1.equals(student2));//输出是false
System.out.println(student1 == student2);//输出是false
}
}
//一个Student类
class Student{
private String name;
private int age ;
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//用getClass方法可以将原来的元素提取出来,在这个案例中,用getClass取
//出来进行元素间的比较,然后判断元素是否相同。用student1和student2比较
//不管是用==号链接还是调用equals方法来调用比较都输出的是false,因为他
//们比较的是地址值的是否相等
toString方法
toString是将其他类转换成字符类的方法,也就是返回该对象的字符串表示
clone方法
这个方法就更简答了,他是创建并返回对象的一个副本
也就是克隆,克隆对象的时候不会执行构造方法
cloneable里面没有任何抽象方法,这种接口我们称之为标记接口
现在我们优化一下equals,上面说equals是比较地址值的方法,我们优化到按照自己的意愿能比较元素,来比较是否相等
public class test {
public static void main(String[] args) {
Animal animal = new Animal("Tom",25);
Animal animal1 = new Animal("Tom",25);
boolean b = animal.equals(animal1);
System.out.println(b);//输出结果是true
}
public class Animal {
private String name;
private int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
//重写equals方法,让他也比较元素的同否,而不是地址值
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Animal animal = (Animal) o;
return age == animal.age && Objects.equals(name, animal.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}