Object类是java中默认提供的一个类,在java中所有的类都默认继承Object类,即所有类的对象的可以直接使用Object的引用的进行接收。
Object中有一些定义好的方法,如toString(),equals(),hashcod()等方法,下面我们来分析一下这三种方法。
toString()方法——获取对象信息
在Object类中的toString()方法返回的是对象的地址,如果要返回对象的属性,我们需要在具体的方法中重写toString()方法!
// Object类中的toString()方法实现:public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());}
如果要重写toString方法,例如 在Person类中,有name,sex,age等属性,我们要打印这三个内容,则需要这样写:
@Overridepublic String toString() {return "[" + name + "," + gender + "," + age + "]";}
equals()——对象比较
java中,在==进行比较的时候有三种情况:
1.如果==两侧是具体的基本类型变量,比较的是两个变量值是否相同;
2.如果==两侧是引用类型变量,比较的是引用变量的地址是否相同;
1.如果==两侧是具体的基本类型变量,比较的是两个变量值是否相同;
2.如果==两侧是引用类型变量,比较的是引用变量的地址是否相同;
3.如果要比较对象中的内容,则必须要重写eauqls()方法,因为equals也是默认按照地址比较;
// Object类中的equals方法public boolean equals(Object obj) {return (this == obj); // 使用引用中的地址直接来进行比较}
重写equals()方法 ,例如
@Overridepublic boolean equals(Object obj) {if (obj == null) {return false ;}if(this == obj) {return true ;}Person person = (Person) obj ; // 向下转型,比较属性值return this.name.equals(person.name) && this.age==person.age ;}
hashcode()——确定储存位置是否相同
hashcode()方法如果不重写,举一个例子:
class Student{
String name;
int age;
public void Person(String name,int age){
this.name = name;
this.age = age;
}
}
public class Test {
public static void main(String[] args) {
Person person1 = new Person("xiaoming",20);
Person person2 = new Person("xiaoming",20);
System.out.println(person1.hashCode());
System.out.println(person2.hashCode());
}
}
得到返回值为:
460141958
1163157884
如果我们重写后:
import java.util.Objects;
class Student{
String name;
int age;
public Student(String name,int age){
this.name = name;
this.age = age;
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
public class Test {
public static void main(String[] args) {
Student person1 = new Student("xiaoming",20);
Student person2 = new Student("xiaoming",20);
System.out.println(person1.hashCode());
System.out.println(person2.hashCode());
}
}
答案就变成了:
-364430687
-364430687
所以重写后的hashcode()可以判断哈希值是否相等。