zoukankan      html  css  js  c++  java
  • Object类的toString()和equals()方法

    我们知道,Object类是所有类的父类,因此也被称为根类、祖先。那么,我们就来看一看Object类的最常用的两个方法是如何用的。

    1.toString方法

    Object类的toString()方法默认返回的是对象地址值,如果某个类的toString()方法返回的不是对象地址值,则说明这个类重写了toString()方法。

    public class Test5 {
        public static void main(String[] args) {
            Person p1=new Person();
            System.out.println(p1.toString());
            //没有重写toString()方法,返回的是对象的地址值 cn.itcast.Person@3feba861
        }
    }

    接下来我们重写Person的toString()方法

    public class Person {
        private String name;
        private int age;
    
        //重写toString()方法
        @Override
        public String toString() {
            return "姓名: "+name+" 年龄:"+age;
        }
    
        public Person(){
    
        }
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }

    再来看看toString()方法返回的值:

    public class Test5 {
        public static void main(String[] args) {
            Person p1=new Person();
            System.out.println(p1.toString());
            //重写了toString()方法,返回的是方法的返回值
            Person p2=new Person("aaa",18);
            System.out.println(p2.toString());
    //        姓名: null 年龄:0
    //        姓名: aaa 年龄:18
        }
    }

    2.equals方法

    equals()方法的源码如下所示:

    public boolean equali(Object obj){
    
      return this==obj;
    
    }

    因为 == 比较的是对象的地址值,所以Object类的equals()默认比较的是地址值,需要重写才有意义。具体如何重写,就看我们比较两个对象是否相同的依据是什么了。

    举个例子:我们规定,如果两个人的姓名和年龄都一样,那么两个人相同。

        //重写Person类的equals()方法
        @Override
        public boolean equals(Object obj) {
            return this.name==((Person)obj).name&&this.age==((Person)obj).age;
        }

    再来测试一下equals()方法:

    public class Test5 {
        public static void main(String[] args) {    
            Person p3=new Person("aa",21);
            Person p4=new Person("aa",23);
            Person p5=new Person("bb",21);
            Person p6=new Person("aa",21);
            System.out.println(p3.equals(p4)); //false
            System.out.println(p3.equals(p5)); //false
            System.out.println(p3.equals(p6)); //true
       }
    }

    equals()方法的注意事项:

    (1)除了用a.equals(b)这个写法之外,也可以用Objects.equals(a,b),作用是一样的。

    (2)equals方法空指针安全,即容忍空指针。即equals()方法中的参数可以有null,返回值永远为false。

    (3)null不可以调用方法,所以若a为空,则不能调用a.equals()方法,否则会出现NullPointERException.正因为如此,我们一般将常量或已知非空的对象放在前面,即写成"aa".equals(str)而不是str.equals("aa").

  • 相关阅读:
    Nginx 日志切割-定时(附数据库数据备份)
    安装Nginx
    系统自适应限流
    黑名名单控制-sentinel
    热点参数的流量控制
    流量控制文档说明
    在Linux中输入命令时打错并按了enter
    配置maven环境
    项目层次展示
    寻找cmd的管理员运行
  • 原文地址:https://www.cnblogs.com/iceywu/p/12015118.html
Copyright © 2011-2022 走看看