zoukankan      html  css  js  c++  java
  • 1.9(java学习笔记)object类及toString()与equals()方法

    object类

    java中objec是所有类公共的父类,一个类只要没有明显的继承某一类,那么它就是继承object类。

    例如 class Person {......};和class Person extends Object{......}是一样的。如果我们的Studdent继承了Person类,继承结构就应该是

    这时大家可能会想,为什么要默认继承object类,把objec类作为公共的父类有什么用?

    object类作为公共的父类,那么所有的子类都可以调用Object类中的方法。

    下列结束两个Object类中的方法

    1.toString

    我们看下列代码

     1 package TestObject;
     2 
     3 public class Person {
     4     public static void main(String[] args){
     5         Student stu1 = new Student();
     6         System.out.println(stu1);
     7         System.out.println(stu1.toString());
     8     }
     9 
    10 }
    11 
    12 class Student extends Person{
    13     void study(){
    14         System.out.println("学习中...");
    15     }
    16 }
    运行结果:
    TestObject.Student@15db9742
    TestObject.Student@15db9742

    我们会发现运行的结果是一样的。我们在来看看object中toString()f方法的源码

    1 public String toString() {
    2         return getClass().getName() + "@" + Integer.toHexString(hashCode());
    3     }

    前面是获取名称,后面是获取地址。

    这个方法是Object类中的,是所有子类的公共父类,所以我们可以通过重写toString()方法来达到我们需要的功能。

     1 package TestObject;
     2 
     3 public class Person {
     4     String name = "hcf";
     5     public static void main(String[] args){
     6         Student stu1 = new Student();
     7         System.out.println(stu1);
     8         System.out.println(stu1.toString());
     9     }
    10 
    11 }
    12 
    13 class Student extends Person{
    14     void study(){
    15         System.out.println("学习中...");
    16     }
    17     public String toString(){
    18         return name;
    19     }
    20 }
    运行结果:
    hcf
    hcf

    这样我们就重写了Object类中的toString()方法。

    2.equals()

    我们先看下object类中的equals()方法源码

    1 public boolean equals(Object obj) {
    2         return (this == obj);

    可以看出,这个比较是直接比较地址值是否相等。

    我们实际使用时可能认为,两个对象的内容相同就是相同的对象,可这时使用equals比较会出问题。因为对象的内容相同,但它们的存放地址是不同的,即不同的地址存放着相同的内容。

    这是我就需要重写object类中equals方法,改写成对象的内容相同就代表它们相同。

    下面是重写之后的equals方法。

     1 package TestObject;
     2 
     3 public class Person {
     4     String name = "hcf";
     5     public static void main(String[] args){
     6         Student stu1 = new Student();
     7         Student stu2 = new Student();
     8         System.out.println(stu1 == stu2);
     9         System.out.println(stu1.equals(stu2));
    10     }    
    11 }
    12 
    13 
    14 class Student extends Person{
    15     void study(){
    16         System.out.println("学习中...");
    17     }
    18     public String toString(){
    19         return name;
    20     }
    21     
    22     @Override   //加上这个标记代表重写了该方法。
    23     public boolean equals(Object obj) { //因为Object是所有对象的父类,所以可以使用Object来接受任意类型的对象,便于操作。
    24         if(this == obj)                //首先判断两个对象地址是否相同,地址相同则肯定是相同对象。
    25             return true;
    26         if(!(obj instanceof Student))  //然后在判断两个是不是同一类,如果类不想同,则不同。
    27             return false;
    28         Student stu = (Student)obj;    //先将obj强制转型成Student,然后一个一个属性区比较
    29         if(stu.name.equals(this.name)) //此时的equals是String类中的方法,作用是比较字符的内容是否相同。
    30             return true;               //stu.name是String形式,所以调用的是String中的equals方法,
    31         else                           //String中也重写了equals方法,作用是比较字符串内容是否相等。
    32             return false;    
    33     }
    34     
    35 }

     object类中一些方法我们会根据自己需要来重写。

  • 相关阅读:
    Scars To Your Beautiful
    【BZOJ1833】【ZJOI2010】数字计数(数位DP)
    滑块拼图
    神经元(prufer序列+dp)
    sequence(dp+hash+二分搜索+前缀和优化)
    循环移位(后缀自动机)
    MST(最小生成树+倍增)
    nyoj 845【水】
    分割问题【知识点】
    扩展欧几里得【知识点】
  • 原文地址:https://www.cnblogs.com/huang-changfan/p/9329087.html
Copyright © 2011-2022 走看看