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

news2024/11/20 4:43:05

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

一、Java开发手册说明

在第一章:编程规约 -> 第四节:OOP规约 -> 第6条内容如下图:
Java开发手册中对Object的equals方法的说明
这里说 Object.equals() 方法容易抛空指针异常,空指针异常相信大家并不陌生,应该使用确定有值的对象来调用 equals() 方法,不能无中生有,不能从 null 调用方法,还举了正例与反例。最后推荐使用 Objects.equals() 方法。

二、Object.equals()方法

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

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

这个方法的实现非常简单,它首先用引用比较来检查传递给它的参数对象是否是当前对象本身,如果是,则返回 true,表示两个对象相等。否则,它返回 false,表示两个对象不相等。
我们需要注意的是,Object 的 equals() 方法是根据对象的引用来判断两个对象是否相等的,而不是根据对象的内容。如果我们要比较两个对象的内容是否相等,我们需要重写 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类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/454736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我在 Linux部署皕杰报表遇到的问题及解决方法

Linux是一种自由和开放源码的类 UNIX 操作系统,作为服务器的操作系统广泛应用。Linux由林纳斯托瓦兹在赫尔辛基大学上学时创立,主要受到 Minix 和 Unix 思想的启发。Linux英文解释为 Linux is not Unix。 皕杰报表支持在linux系统中部署,只需…

短视频矩阵优化系统开发步骤:

1. 矩阵号注册:用户可以通过该功能注册矩阵号,填写个人基本信息并上传身份证明材料进行实名认证。 2. 矩阵号登录:用户使用注册成功的账号密码登录矩阵号系统。 3. 矩阵号管理:用户可以通过该功能管理自己的矩阵号,包…

3 亿岗位将被 AI 取代?巴比特深度采访业界后,“失业潮”真相有些出人意料……...

图片来源:由无界 AI工具生成 人工智能技术的发展正迎来奇点,尤其是今年以来 ChatGPT 和 AIGC 的迅猛势头让无数人猝不及防,真真切切地对各行各业现有的工作岗位产生冲击。近日,蓝色光标全面停止创意设计、方案撰写、文案撰写、短期…

Oracle:ORA-00600[4137]问题分析

背景: 在为用户的新机房环境Oracle 19.18版本数据库检查时,发现smon进程后台日志不断出现事务恢复报错Serial Transaction recovery caught exception 30319,进一步检查发现存在事务恢复失败报ORA-00600[4137] 问题: smon进程后台日志不断出现事务恢复报…

【对比】文心一言对飚ChatGPT实操对比体验

前言 🍊缘由 百度【文心一言】体验申请通过 本狗中午干饭时,天降短信,告知可以体验文心一言,苦等一个月的实操终于到来。心中这好奇的对比心理油然而生,到底是老美的【ChatGPT】厉害,还是咱度娘的【文心一…

地下污水厂智能照明控制应用

摘要:结合某地下污水厂项目,从结构、系统组成、系统功能、控制要求、场景模式等方面介绍了地下污水厂智能照明控制系统,探索了一套适用于地下污水厂的智能照明控制策略,以确保地下污水厂正常运行的照明需求。 关键词:智能照明控制系统;地下污…

苦熬10年,国产操作系统“归零”,新操作系统上新,跟Excel很像

苦熬10余年,国产操作系统自主研发 说到国内自主研发的操作系统,经验最丰富的品牌,当然是麒麟OS. 从诞生到发展,历经10多年的努力,麒麟os逐渐成为了国内自主研发操作系统领域中的一颗耀眼的明珠。麒麟OS不仅推出了许多…

Java基础(十)字符串相关类

1 字符串相关类之不可变字符序列:String 1.1 String的特性 java.lang.String 类代表字符串。Java程序中所有的字符串文字(例如"hello" )都可以看作是实现此类的实例。 字符串是常量,用双引号引起来表示。它们的值在创…

​如何恢复回收站清空的文件?

清空回收站后可以恢复删除的文件吗? 你是否遇到过清空回收站后才意识到某些文件不应删除的情况。发生这种情况时,许多人会感到恐慌,并且想知道是否有可能恢复回收站清空的文件。 事实上,你不必为此担心。当用户清空回收站时&a…

一种大于2GB ONNX模型onnxsim优化方法

大于2GB模型onnxsim优化很耗时,容易挂掉,而且需要特别大的系统内存。 这里提出一种比较简单的优化大于2GB ONNX模型的方法: 基本思路是 把卷积和矩阵乘的权重(参数量大于某个阈值)替换为ConstantOfShape&#xff0c…

GB/T 28181-2022 新版差异笔记

GB/T 28181-2022 新版差异笔记 文章目录 GB/T 28181-2022 新版差异笔记更改了标准范围删除部分术语和定义增加PTZ缩略语更改SIP监控域互联结构图更改了“联网系统通讯协议结构图”增加了媒体流数据传输的RTP时间戳要求增加了对H.265、AAC的支持更改了SDP协议的引用更改了与其他…

Vue中生成二维码组件——vue-qr——插件市场

最近在重构一个老系统,老系统用的是vueelementUi的框架,现在要更新为vueantdesign的框架模式。 下面记录一下用到的插件: 1.Vue中生成二维码组件——vue-qr vue-qr官网链接:https://www.npmjs.com/package/vue-qr 1.1 安装vue-…

Simulation Extractable Versions of Groth’s zk-SNARK Revisited学习笔记

1. 引言 等人2020年论文《Simulation Extractable Versions of Groth’s zk-SNARK Revisited》,开源代码实现见: https://github.com/Baghery/ABPR22(Rust,基于arkworks开发。使用了Multi-Scalar Multiplication (MSM)技术来优化…

json模块和pickle模块

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 json和pickle模块 json模块序列化与反序列化json模块中的方法 pickle模块 专栏:《python从…

IT运维:Windows常用的命令行客户端

对于IT运维人员来说,和命令打交道是必不可少的事情,拥有一个好用的CMD命令行工具,对提升效率是非常有必要的,今天给大家分享Windows常用的命令行客户端,希望对大家能有所帮助! 1、PowerShell PowerShell是W…

4月21日作业

#include <iostream> #include <cstring> using namespace std; //定义类 class myString { private: char *str; int size; public: //无参构造 myString():size(32) { str new char[size]; strcpy(str,""); cout << "无参构造&qu…

Windows Server 2012 R2 部署.net6网站

之前部署在Windows Server 2016上很正常没有什么问题 但是在2012 R2上部署失败&#xff08;503&#xff09;&#xff0c;网上搜查后&#xff0c;发现要按照下面的顺序配置服务器 安装Windows操作系统布丁 Download Windows Server 2012 R2 更新 (KB2919355) from Official M…

搭建Serv-U FTP服务器共享文件并外网远程访问「无公网IP」

文章目录 1. 前言2. 本地FTP搭建2.1 Serv-U下载和安装2.2 Serv-U共享网页测试2.3 Cpolar下载和安装 3. 本地FTP发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转载自内网穿透工具的文章&#xff1a;使用Serv-U搭建FTP服务器并公网访问【内网穿透】 1. 前言…

pycharml利用ddddocr和selenium识别验证码并登录

文章目录 1OCR2 ddddocr3使用案例4 常见问题代码详情获得XPATH方法 1OCR OCR (Optical Character Recognition&#xff0c;光学字符识别)&#xff0c;是指电子设备(例如扫描仪或 数码相机)检查纸上打印的字符&#xff0c;通过检测暗、亮的模式确定其形状&#xff0c;然后用字符…

Excel数据分列的详细用法

Excel数据分列的详细用法 数据分列常见功能有日期格式的转换&#xff0c;有规律的数据分列&#xff0c;固定宽度的数据分列&#xff0c;读书屋办公教程网这篇文章将详细讲解Excel快速填充及文本与数值的互换。 软件演示版本&#xff1a;Microsoft Excel2019 快速填充 如下图表…