zoukankan      html  css  js  c++  java
  • java--常用API之Object类

    一、概念

              Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。所有类在创建对象的时候,最终找的父类就是ObjectObject类众多方法中,我们先学习equals方法与toString方法,其他方法后面课程中会陆续学到。

    二、equals方法

            equals方法,用于比较两个对象是否相同,它其实就是使用两个对象的内存地址在比较。Object类中的equals方法内部使用的就是==比较运算符。在开发中要比较两个对象是否相同,经常会根据对象中的属性值进行比较,也就是在开发经常需要子类重写equals方法根据对象的属性值进行比较。如下代码演示:

     1 /*
     2      描述人这个类,并定义功能根据年龄判断是否是同龄人
     3      由于要根据指定类的属性进行比较,这时只要覆盖Object中的equals方法
     4      在方法体中根据类的属性值进行比较
     5  */
     6 class Person extends Object{
     7     int age ;
     8     //复写父类的equals方法,实现自己的比较方式
     9     public boolean equals(Object obj) {
    10         //判断当前调用equals方法的对象和传递进来的对象是否是同一个
    11         if(this == obj){
    12             return true;
    13         }
    14         //判断传递进来的对象是否是Person类型
    15         if(!(obj instanceof Person)){
    16             return false;
    17         }
    18         //将obj向下转型为Perosn引用,访问其属性
    19         Person p = (Person)obj;
    20         return this.age == p.age;
    21     }
    22 }

    注意:在复写Object中的equals方法时,一定要注意public boolean equals(Object obj)的参数是Object类型,在调用对象的属性时,一定要进行类型转换,在转换之前必须进行类型判断。

    三、toString方法

    toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。

    由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。

    1 class Person extends Object{
    2     int age ;
    3     //根据Person类的属性重写toString方法
    4     public String toString() {
    5         return "Person [age=" + age + "]";
    6     }
    7 }

    例如:

    Person类

     1 public class Person {
     2     private String name;
     3     private int age;
     4     Person(){
     5         
     6     }
     7     Person(String name,int age){
     8         this.name=name;
     9         this.age=age;
    10     }
    11 
    12     public boolean equals(Object obj) {//Object obj=new Person();
    13         //调用子类都有的成员,需要向下转型
    14         if(obj==null){
    15             return false;
    16         }
    17         if(obj==this){
    18             return true;
    19         }
    20         if(obj instanceof Person ){
    21             Person p=(Person)obj;
    22             return this.age==p.age;
    23         }
    24         return false;
    25     }
    26     @Override
    27     public String toString() {
    28         return "Person [name=" + name + ", age=" + age + "]";
    29     }
    30     
    31     /*public String toString() {
    32         
    33         return "name:"+name+",age:"+age;
    34     }*/
    35     
    36 }

    测试类

     1 public class Demo01 {
     2 
     3     public static void main(String[] args) {
     4         Person p1=new Person("熊大",2);
     5         Person p2=new Person("熊二",2);
     6         ArrayList<String> list=new ArrayList<String>();
     7         System.out.println(p1==p2);           //false
     8         System.out.println(p1.equals(list));  //false
     9         System.out.println(p1);//默认打印tostring()   子类方法重写后  就变成子类重写方法
    10         System.out.println(p2);
    11     }
  • 相关阅读:
    1114: 零起点学算法21——求平均值
    1113: 零起点学算法20——输出特殊值II
    1112: 零起点学算法19——输出特殊值
    1111: 零起点学算法18——3个数比较大小
    1110: 零起点学算法17——比较2个数大小
    1109: 零起点学算法16——鸡兔同笼
    1108: 零起点学算法15——交换变量
    1107: 零起点学算法14——三位数反转
    1106: 零起点学算法13——求2个时间之间的分钟数
    设计模式之—中介者模式<Mediator Pattern>
  • 原文地址:https://www.cnblogs.com/-dashu/p/9395121.html
Copyright © 2011-2022 走看看