你还在用Object.equals()方法吗?

这篇具有很好参考价值的文章主要介绍了你还在用Object.equals()方法吗?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

当《阿里巴巴Java开发手册》发布后,我也是仔细进行了阅读,想从中找出一些“标准”,让自己的代码质量提高。手册中对 Objectequals 方法的使用进行了强制,而且推荐使用 JDK7 中工具类 Objectsequals 方法,至此之后我就很少使用 Object.equals() 方法了。


一、Java开发手册说明

在第一章:编程规约 -> 第四节:OOP规约 -> 第6条内容如下图:

你还在用Object.equals()方法吗?

这里说 Object.equals() 方法容易抛空指针异常,空指针异常相信大家并不陌生,应该使用确定有值的对象来调用 equals() 方法,不能无中生有,不能从 null 调用方法,还举了正例与反例。最后推荐使用 Objects.equals() 方法。

二、Object.equals()方法

Object.equals() 方法是 Java 语言中的一个基础方法,用来比较两个对象是否相等。以下是它的源代码实现:

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

这个方法的实现非常简单,它首先用引用比较来检查传递给它的参数对象是否是当前对象本身,如果是,则返回 true,表示两个对象相等。否则,它返回 false,表示两个对象不相等。

我们需要注意的是,Objectequals() 方法是根据对象的引用来判断两个对象是否相等的,而不是根据对象的内容。如果我们要比较两个对象的内容是否相等,我们需要重写 equals() 方法,这样就可以根据对象的具体内容来判断它们是否相等了。

比如 Java 中的字符串类 String 就是通过重写 equals() 方法来实现字符串内容的比较的。例如,以下代码比较两个字符串的内容是否相等:

String str1 = new String("你好");
String str2 = new String("你好");

// 比较两个字符串的内容是否相等
if(str1.equals(str2)) {
    System.out.println("这两个字符串内容相等。");
}
else {
    System.out.println("这两个字符串内容不相等");
}

执行结果为:

这两个字符串内容相等。

三、Objects.equals()方法

Java 中的 Objects.equals() 方法实际上是由 Java 中的 Objects 类提供的静态方法,以下是它的源代码:

public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}

这个方法的实现非常简洁,它首先通过引用比较来检查传递给它的两个对象是否相同。如果相同,它直接返回 true。否则,它进一步检查第一个参数是否为 null,如果为 null,则返回 false。否则,它调用第一个参数的 equals() 方法来比较两个对象的内容是否相同。

我们需要注意的是,这个方法中使用的是逻辑或运算符(||)。首先检查第一个条件是否为 true,只有当第一个条件为 false 时才会执行第二个条件。这种方式在 Java 中有时被称为 "short-circuiting"。这里也就是短路或,这种技巧可以用来提高代码的效率,避免执行不必要的操作。

Objects.equals() 方法是 Java 中用于比较两个对象是否相等的一个实用工具方法,它可以处理对象为 null 的情况,避免了因对象为 null 而产生 NullPointerException 的问题。具体来说,如果两个参数都是 null,则返回 true;如果一个参数是 null 而另一个不是 null,则返回 false;否则,调用第一个参数的 equals 方法进行比较。这样就避免了空指针异常了。

四、Objects.equals()和Object.equals()

Java 中的 Objects.equals()Object.equals() 方法都用于比较两个对象是否相等,但是它们之间还是有一些差异的。

  • 对比 null 值:Objects.equals() 方法可以比较 null 值,而 Object.equals() 方法不能比较 null 值,如果比较 null 值,将会抛出 NullPointerException

  • 实现原理:Objects.equals() 方法内部调用的是第一个对象的 equals() 方法进行比较,如果第一个对象为 null,则直接返回与第二个对象比较的结果。而 Object.equals() 方法直接比较两个对象的引用是否相同。

  • 参数类型:Objects.equals() 方法的两个参数可以是任意类型,而 Object.equals() 方法的参数必须是 Object 类型。


总结

建议使用 JDK7 中工具类 Objectsequals 方法。


关注公众号:编程火箭车
我们定期发布编程相关的文章、资讯、活动等内容。帮助编程爱好者、初学者或初级程序员快速入门、打牢基础。欢迎大家关注,和我们一起探索编程的精彩世界。文章来源地址https://www.toymoban.com/news/detail-473351.html

到了这里,关于你还在用Object.equals()方法吗?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • React 你还在用 Redux 吗?更简化的状态管理工具(Recoil)

    React 你还在用 Redux 吗?更简化的状态管理工具(Recoil)

    以往传统的 Redux 状态管理工具使用起来代码太过于复杂。 你需要通过纯函数触发 action 再去修改 data 中定义的数据,而且要通过接口请求数据还需要借助 redux - think 这个中间件才能完成。。。 更加方便使用的工具:Recoil ~   由 facebook 推出契合 React 的状态管理 它的定义方式

    2024年02月06日
    浏览(16)
  • 记录--你还在用传统轮播组件吗?来看看遮罩轮播组件

    记录--你还在用传统轮播组件吗?来看看遮罩轮播组件

    最近有一个页面改版的需求,在UI走查阶段,设计师说原来的轮播组件和新版页面UI整体风格不搭,所以要换掉。 这里就涉及到两种轮播组件,一种是传统的轮播组件,一种是设计师要的那种。 传统的轮播组件,大家都见过,原理也清楚,就是把要轮播的图片横向排成一个队

    2024年02月17日
    浏览(12)
  • Java 你还在用list.contain做去重? 你是故意的还是不小心的?

    Java 你还在用list.contain做去重? 你是故意的还是不小心的?

    最近又是一轮代码review , 发现了一些实现去重的代码,在使用 lsit.contain ...... 如: 我沉思,是不是其实很多初学者也存在这种去重使用问题? 所以我选择把这个事情整出来,分享一下。 首先是造出一个 ListString 模拟数据,一共2W条,里面有一半数据1W条是重复的: 先看看 我们

    2024年02月14日
    浏览(14)
  • 你还在用 Postman?IDEA REST Client 好用到爆,Postman 可以扔了

    你还在用 Postman?IDEA REST Client 好用到爆,Postman 可以扔了

    语法部分 演示POST请求 POST {{baseUrl}}}get?show_env=1 Accept: application/json { “name”:“a” } 演示GET请求 GET {{baseUrl}}}/post Content-Type: application/x-www-form-urlencoded id=999value=content 首先通过###三个井号键来分开每个请求体,然后请求url和header参数是紧紧挨着的,请求参数不管是POST的body传参

    2024年04月12日
    浏览(14)
  • 【优雅的参数验证@Validated】@Validated参数校验的使用及注解详解——你还在用if做条件验证?

    【优雅的参数验证@Validated】@Validated参数校验的使用及注解详解——你还在用if做条件验证?

    请先看看下面代码:(简单举个例子,代码并不规范) 以上代码主要是为了对用户user实体进行条件验证。 但是那么多的if, 写得纯纯得小白一个,也使得代码显得臃肿不美观不优雅! 接下来,让我们学习使用优雅的参数验证@Validated! @Valid和@Validated是Spring Validation框架提供

    2024年02月02日
    浏览(18)
  • Object.equals 和 String.equals的区别

    一.  源码展示: 1. Object.equals: ①引用类型地址值比较,直接返回结果:true || false   2. String.equals: ① 判断地址值是否相等,若相等 返回 true,若不等则进入下列判断 ; ② 判断参数是否为String类型,若不是 返回false,若是则进入下列判断; ③ 判断字符串长度是否相等,若不

    2024年02月13日
    浏览(14)
  • 正确使用 equals 方法

    Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用 equals。 举个例子: 运行上面的程序会抛出空指针异常,但是我们把第二行的条件判断语句改为下面这样的话,就不会抛出空指针异常,else 语句块得到执行。: 不过更推荐使用 java.util.Objects#equals (JDK

    2024年02月14日
    浏览(11)
  • Java中的equals方法

    Java中的equals方法

    \\\"==\\\"是一个比较运算符。 \\\"==\\\"既可以判断基本类型,又可以判断引用类型。 \\\"==\\\"如果判断基本类型,判断的是值是否相等。eg: int i=10; double d=10.0 \\\"==\\\"如果判断引用类型,判断的是地址是否相等,即判定是不是同一个对象。 equals是object类中的方法,只能用于判断 引用类型 。 equa

    2024年02月03日
    浏览(14)
  • equals方法的用法(java)

    equals 和 == 易错使用案例集合

    2024年02月16日
    浏览(10)
  • “==“和equals方法究竟有什么区别?

    ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用 ==操作符。 如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内

    2023年04月17日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包