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()可以判断哈希值是否相等。