• Object类及其常用方法简介


    Object类是一个特殊的类,是所有类的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类。这里主要总结Object类中的三个常用方法:toString()、equals()、hashCode()。

    1.取得对象信息的方法:toString()

    该方法在打印对象时被调用,将对象信息变为字符串返回,默认输出对象地址。

    复制代码
     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 }
    复制代码

    输出结果:

    姓名:Mary,年龄:21

    ClassNotes.Student@15db9742

    ClassNotes.Student@15db9742

    上述结果看出编译器默认调用toString()方法输出对象,但输出的是对象的地址,我们并不能看懂它的意思。那么就要通过重写Object类的toString()方法来输出对象属性信息。

    复制代码
    1 class Student
    2 {
    3     String name = "Mary";
    4     int age = 21;
    5     public String toString()
    6     {
    7         return "姓名:"+name+",年龄:"+age;
    8     }
    9 }
    复制代码

    输出结果:姓名:Mary,年龄:21。这样对象信息就更加清晰了。

    2.对象相等判断方法:equals()

    该方法用于比较对象是否相等,而且此方法必须被重写。

    复制代码
     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 }
    复制代码

    输出结果:s1和s2不是同一个人。

    很明显输出的结果是错误的,因为equals()方法比较的是两个对象的地址,所以必须重写方法才能到达目的。

    复制代码
     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 }
    复制代码

    上面的是书上的例子,不太好理解,我自己编了一个equals()方法,简单但不知道对不对:

     DEMO

    ***在Eclipse偶然发现一个快捷键,按住ctrl+/会注释当前行

    3.对象签名:hashCode()

    该方法用来返回其所在对象的物理地址(哈希码值),常会和equals方法同时重写,确保相等的两个对象拥有相等的.hashCode。

    复制代码
     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 }
    复制代码

    输出结果:

    s1的哈希码:9298668

    s2的哈希码:9298668

    s1和s2是同一人

    看似简单的知识背后,承载的是收获和成长!
  • 相关阅读:
    HDU2795Biliboard
    Choose and Divide UVa10375 题解
    NKOJ2322: OSU!
    Git学习笔记(0)
    NKOJ2317 英语四六级考试
    NKOJ2321 东方project
    NKOJ2319 奇怪的班级 题解
    两点之间最短路径:弗洛伊德算法
    poj2524 Ubiquitous Religions
    SAP PA 共享 免费下载
  • 原文地址:https://www.cnblogs.com/hunrry/p/9183044.html
Copyright © 2020-2023  润新知