JAVA的类主要划分为三种
(1)JDK提供的官方类库
(2)第三方提供的类库(工具、框架)
(3)开发自定义类
Object
object是JDK中的一个类,是所有类的直接父类或间接父类
重写Object类
主要讲toString()、equals()、hashCode()
public String toString() :以字符串的形式返回对象的信息;
public boolen equals(object obj) :判断两个对象是否相等;
public native int hashCode(): 返回对象的hash值
1.toString()
public class People {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "人类\t" +
"编号=" + id +
", 姓名=" + name ;
}
}
public class Test {
public static void main(String[] args) {
People people = new People();
people.setId(1);
people.setName("胡一");
System.out.println(people);
}
}
2.equals()
==:比较的永远是变量的值(对象的存储地址)
equals:判断两个对象是否相等
equals重写:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
People people = (People) o;
return id == people.id &&
Objects.equals(name, people.name);
}
People people = new People();
people.setId(1);
people.setName("胡一");
System.out.println(people);
People people1 = new People();
people.setId(1);
people.setName("胡二");
Integer a =1;
Integer b = 1;
System.out.println(people.equals(people1)); //false
System.out.println(a.equals(b)); //true
3.hashCode
用来获取对象的散列值,散列值是根据对象的内存地址和对象的信息映射出来的一个数值。
效率高于equals
任何两个对象的内存地址肯定不一样,但实际开发如果两个对象的属性值完全一样的时候就认为同一个对象,那么散列值也相同。
实际开发通过equals和hashCode一同使用来判断两个对象是否相同,首先判断两个对象的散列值是否相同,若散列值不同则一定不同,若散列值相同可能对象不同,这时需要通过equals来进一步判断,最终得出是否相等。
@Override
public int hashCode() {
return this.id*this.name.hashCode();
}