Object类toString()和equals()方法使用解析

 更新时间:2020年02月26日 12:45:21   作者:遍唱阳春  
这篇文章主要介绍了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").

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java8 stream 如何打印数据元素

    java8 stream 如何打印数据元素

    这篇文章主要介绍了java8 stream 如何打印数据元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 浅谈Java利用表格模型创建表格

    浅谈Java利用表格模型创建表格

    这篇文章主要介绍了Java利用表格模型创建表格,需要的朋友可以参考下
    2017-09-09
  • java固定大小队列的几种实现方式详解

    java固定大小队列的几种实现方式详解

    队列的特点是节点的排队次序和出队次序按入队时间先后确定,即先入队者先出队,后入队者后出队,这篇文章主要给大家介绍了关于java固定大小队列的几种实现方式,需要的朋友可以参考下
    2021-07-07
  • java如何获取map中value的最大值

    java如何获取map中value的最大值

    这篇文章主要介绍了java如何获取map中value的最大值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • java获取当前时间的四种方法代码实例

    java获取当前时间的四种方法代码实例

    这篇文章主要介绍了java获取当前时间的四种方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • java中pdf转图片的实现方法

    java中pdf转图片的实现方法

    下面小编就为大家带来一篇java中pdf转图片的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • java开发使用BigDecimal避坑四则

    java开发使用BigDecimal避坑四则

    这篇文章主要为大家介绍了java开发使用BigDecimal的避坑四则,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 浅谈servlet3异步原理与实践

    浅谈servlet3异步原理与实践

    本篇文章主要介绍了servlet3异步原理与实践,详细的介绍了servlet和异步的流程使用,具有一定的参考价值,有兴趣的可以了解一下
    2017-10-10
  • spring的父子容器及配置详解

    spring的父子容器及配置详解

    本篇文章主要介绍了spring的父子容器及配置详解,详细的介绍了spring父子容器的概念、使用场景和用法,有兴趣的可以了解一下
    2018-01-01
  • c语言来实现贪心算法之装箱问题

    c语言来实现贪心算法之装箱问题

    这篇文章主要介绍了c语言来实现贪心算法之装箱问题,需要的朋友可以参考下
    2015-03-03

最新评论