Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类。这里主要总结Object类中的三个常用方法:toString()、equals()、hashCode()。
    1.取得对象信息的方法:toString()
    该方法在打印对象时被调用,将对象信息变为字符串返回,默认输出对象地址。
    Object类 - 图1
    1 class Student
    2 {
    3 String name = “Mary”;
    4 int age = 21;
    5 }
    6
    7 public class Text{
    8 public static void main(String[] args)
    9 {
    10 Student s = new Student();
    11 System.out.println(“姓名:”+s.name+”,年龄:”+s.age);//输出对象属性
    12 System.out.println(s);//直接输出对象信息
    13 System.out.println(s.toString());//调用父类方法输出对象信息
    14 }
    15 }
    Object类 - 图2
    输出结果:
    姓名:Mary,年龄:21
    ClassNotes.Student@15db9742
    ClassNotes.Student@15db9742
    上述结果看出编译器默认调用toString()方法输出对象,但输出的是对象的地址,我们并不能看懂它的意思。那么就要通过重写Object类的toString()方法来输出对象属性信息。
    Object类 - 图3
    1 class Student
    2 {
    3 String name = “Mary”;
    4 int age = 21;
    5 public String toString()
    6 {
    7 return “姓名:”+name+”,年龄:”+age;
    8 }
    9 }
    Object类 - 图4
    输出结果:姓名:Mary,年龄:21。这样对象信息就更加清晰了。
    2.对象相等判断方法:equals()
    该方法用于比较对象是否相等,而且此方法必须被重写。
    Object类 - 图5
    1 class Student
    2 {
    3 String name;
    4 int age;
    5 public Student(String name,int age)
    6 {
    7 this.name=name;
    8 this.age=age;
    9 }
    10 }
    11
    12 public class Text{
    13 public static void main(String[] args)
    14 {
    15 Student s1 = new Student(“Mary”,21);
    16 Student s2 = new Student(“Mary”,21);
    17 System.out.println(s1.equals(s2));//输出一个boolean值
    18 System.out.println(s1.equals(s2)?”s1和s2是同一个人”:”s1和s2不是同一个人”);//?:条件运算符
    19 }
    20 }
    Object类 - 图6
    输出结果:s1和s2不是同一个人。
    很明显输出的结果是错误的,因为equals()方法比较的是两个对象的地址,所以必须重写方法才能到达目的。
    Object类 - 图7
    1 //重写父类(Object类)中的equals方法
    2 public boolean equals(Object o)
    3 {
    4 boolean temp = true;
    5 Student s1 = this;
    6 if(o instanceof Object)
    7 {
    8 Student s2 = (Student)o;
    9 if(!(s1.name.equals(s2.name)&&s1.age==s2.age))
    10 {
    11 temp = false;
    12 }
    13 }
    14 else
    15 {
    16 temp = false;
    17 }
    18 return temp;//返回一个布尔值
    19 }
    Object类 - 图8
    上面的是书上的例子,不太好理解,我自己编了一个equals()方法,简单但不知道对不对:
    Object类 - 图9 DEMO
    *在Eclipse偶然发现一个快捷键,按住ctrl+/会注释当前行
    3.对象签名:hashCode()*
    该方法用来返回其所在对象的物理地址(哈希码值),常会和equals方法同时重写,确保相等的两个对象拥有相等的.hashCode。
    Object类 - 图10
    1 class Student
    2 {
    3 String name;
    4 int age;
    5 //重写父类(Object类)中的equals方法
    6 public boolean equals()
    7 {
    8 boolean temp;
    9 Student s1 = new Student();
    10 s1.name=”张三”;s1.age=12;
    11 Student s2 = new Student();
    12 s2.name=”张三”;s2.age=12;
    13 System.out.println(“s1的哈希码:”+s1.hashCode());
    14 System.out.println(“s2的哈希码:”+s2.hashCode());
    15 if((s1.name.equals(s2.name))&&(s1.age==s2.age))
    16 {
    17 temp = true;
    18 }
    19 else
    20 {
    21 temp = false;
    22 }
    23 return temp;
    24 }
    25 //重写hashCode()方法
    26 public int hashCode()
    27 {
    28 return age
    (name.hashCode());
    29 }
    30 }
    31
    32 public class Text{
    33 public static void main(String[] args)
    34 {
    35 Student s3 = new Student();
    36 System.out.println(s3.equals()?”s1和s2是同一人”:”s1和s2不是同一人”);
    37 }
    38 }
    Object类 - 图11
    输出结果:
    s1的哈希码:9298668
    s2的哈希码:9298668
    s1和s2是同一人
    看似简单的知识背后,承载的是收获和成长!