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").

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

(0)

相关推荐

  • createObjectURL方法实现本地图片预览

    ie6 可以直接显示本本地路径的图片 如: <img src="file://c:/3.jpg" />  ~~~网上都说ie7就不支持这种文件系统路径的url,但测试 xp ie8还是可以的 ie8+ alphaImageLoader滤镜方式加载本地路径的图片 chrome, firefox, 用dataUrl  或 createObjectURL方法实现 例子: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tr

  • Node.js使用MongoDB的ObjectId作为查询条件的方法

    当往MongoDB中插入一条数据时,会自动生成ObjectId作为数据的主键. 那么如何通过ObjectId来做数据的唯一查询呢? 在MongoDB中插入一条数据 在MongoDB中插入一条如下结构的数据: { _id: 5d6a32389c825e24106624e4, title: 'GitHub 上有什么好玩的项目', content: '上个月有水友私信问我,GitHub 上有没有比较好玩的项目可以推荐?我跟他说:"有,过两天我整理一下".\n' + '\n' + '然而,一个

  • 浅谈Java异常的Exception e中的egetMessage()和toString()方法的区别

    Exception e中e的getMessage()和toString()方法的区别: 示例代码1: public class TestInfo { private static String str =null; public static void main(String[] args) { System.out.println("test exception"); try { if(str.equals("name")){ System.out.println

  • JS中比较两个Object数组是否相等方法实例

    一.问题 在js中是不能直接用"=="或者"==="来计算两个数组是否相等的,那么就需要对数组的值进行比较: 二.次解决方案 对于比较两个数组次要的方法有如下几种,为什么说是次要解决方案呢?因为它不能真正称之为对两个数组的对比. 1. 把两个数组转化为字符串的形式比较,如下: a. 当两个数组元素类型相同,顺序相同时,直接判断是否相等,结果不相等:转化为字符串后,结果相等: var a=[1, 2, 3, 4]; var b = a.slice(); console

  • java中的 toString()方法实例代码

    前言: toString()方法 相信大家都用到过,一般用于以字符串的形式返回对象的相关数据. 最近项目中需要对一个ArrayList<ArrayList<Integer>> datas  形式的集合处理. 处理要求把集合数据转换成字符串形式,格式为 :子集合1数据+"#"+子集合2数据+"#"+....+子集合n数据. 举例: 集合数据 :[[1,2,3],[2,3,5]]  要求转成为 "[1,2,3]#[2,3,5]"

  • 微信小程序picker组件关于objectArray数据类型的绑定方法

    一.前言: 我发现很多的同学都在抱怨说微信小程序的picker的mode = selector/mode = multiSelector 无法实现Object Array数据类型的绑定,其实很多人就想要和html中的下拉选中的通过选中获取vaule中的属性值,其实认真查看微信picker组件详解的都知道其实是可以实现的,只不过微信给的实例是array的实例而object array实例是留给大家去动手的哟,在这里我主要介绍的mode=selector 的objectArray实现. 二.介绍:

  • JS数组Object.keys()方法的使用示例

    本文实例讲述了JS数组Object.keys()方法.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>www.jb51.net Object.keys()方法</title> </head> <body> <script type="

  • 使用django的objects.filter()方法匹配多个关键字的方法

    介绍: 今天在使用django的时候忽然想用到,如何匹配多个关键字的操作,我们知道django有一个objects.filter()方法,我们可以通过如下一句代码实现匹配数据库中title包含key关键词的文章名称. table.objects.filter(title__contains=key) 问题: 但是我的需求是我不仅仅只需要匹配出一个关键字的文章而是多个关键字的文章,那么我们该如何使用django的objects.filter()? table.objects.filter(titl

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

    我们知道,Object类是所有类的父类,因此也被称为根类.祖先.那么,我们就来看一看Object类的最常用的两个方法是如何用的. 1.toString方法: Object类的toString()方法默认返回的是对象地址值,如果某个类的toString()方法返回的不是对象地址值,则说明这个类重写了toString()方法. public class Test5 { public static void main(String[] args) { Person p1=new Person(); S

  • 关于Java中Object类的几个方法示例

    前言 Java语言不同于C++语言,是一种单根继承结构语言,也就是说,Java中所有的类都有一个共同的祖先.这个祖先就是Object类. Object类被称为上帝类,也被称为祖宗类.在定义Java类时,如果没有指定父类,那么默认都会去继承Object类.配合Java的向上类型转换,借助Object类就可以完成很多工作了. object类的结构 Object类的方法 在Object类中,有几个常用的方法,比如getClass().toString()和equals()这三个方法.它们在Object

  • C#使用Object类实现栈的方法详解

    本文实例讲述了C#使用Object类实现栈的方法.分享给大家供大家参考,具体如下: Stack类的代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 使用Object类实现后进先出队列 { class Stack { private Object[] _items; public Object[] Items { get { return this.

  • 浅谈javaSE 面向对象(Object类toString)

    每一个对象,都有一个在内存中的地址哈希值,这个哈希值是十六进制的 调用Object对象的hashCode()方法,返回这个对象的哈希值 调用Integer.toHexString()方法,转换十六进制 调用Object对象的toString()方法,得到:类名@哈希值 通常我们会复写toString()方法,因为默认的没有太大意义 实现原理是类的反射 当我们创建一个对象,会在硬盘上生成xxx.class的文件,jdk定义了Class类来描述这些class文件 调用Object对象的getClas

  • Java自定义实现equals()方法过程解析

    这篇文章主要介绍了Java自定义实现equals()方法过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 以常见的自定义Date类型为例,没有经验的朋友可能会觉得直接比较年月日即可,从而写出以下的实现 public class MyDate implements Comparable<MyDate> { private final int year; private final int month; private final int

  • Python object类中的特殊方法代码讲解

    python版本:3.8 class object: """ The most base type """ # del obj.xxx或delattr(obj,'xxx')时被调用,删除对象中的一个属性 def __delattr__(self, *args, **kwargs): # real signature unknown """ Implement delattr(self, name). "&q

  • Object类wait及notify方法原理实例解析

    Object类中的wait和notify方法(生产者和消费者模式) 不是通过线程调用 wait(): 让正在当前对象上活动的线程进入等待状态,无期限等待,直到被唤醒为止 notify(): 让正在当前对象上等待的线程唤醒 notifyAll(): 唤醒当前对象上处于等待的所有线程 生产者和消费者模式 生产线程和消费线程达到均衡 wait方法和notify方法建立在synchronized线程同步的基础之上 wait方法: 释放当前对象占有的锁 notify方法: 通知,不会释放锁 实现生产者和消

  • Java深入探究Object类的方法

    目录 1.equals方法 1.API中equals方法的介绍 2.==和equals 的对比 2.hashCode方法 3.toString方法 4.finalize方法 本文主要带大家看看Object类中一些常用方法的API文档的介绍和JDK中的源码. 1.equals方法 1.API中equals方法的介绍 2.==和equals 的对比 == 既可以判断基本类型,又可以判断引用类型,如果判断的是基本类型,判断的是值是否相等,如果判断的是引用类型,则判断的是地址是否相等,即判断是不是同一个

  • Java中判断对象是否相等的equals()方法使用教程

    Object类中的equals方法用于检测一个对象是否等于另一个对象.在Object类中,这个方法判断两个对象是否具有相同的引用,如果两个对象具有相同的引用,它们一定是相等的.从这点上看,将其作为默认操作也是合乎情理的.然而,对于多数类类说,这种判断并没有什么意义,例如,采用这种方式比较两个PrintStream是否相等就完全没有意义.然而,经常需要检测两个对象状态的相等性,如果两个对象的状态相等,就认为这两个对象是相等的.所以一般在自定义类中都要重写equals比较. 下面给出编写一个完美eq

  • Java Object类详解_动力节点Java学院整理

    Java作为一个庞大的知识体系,涉及到的知识点繁多,本文将从Java中最基本的类java.lang.Object开始谈起. Object类是Java中其他所有类的祖先类,没有Object类Java面向对象无从谈起.作为其他所有类的基类,Object具有哪些属性和行为,是Java语言设计背后的思维体现. Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入.Object类没有定义属性,一共有13个方法,具体的类定义结构如下图: 1.类构造

随机推荐