`
wxq594808632
  • 浏览: 264167 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

==和eauals的区别

    博客分类:
  • java
阅读更多
一直对==和equals方法判断相等很模糊。今天又仔细看了下。留个纪念


网上一直有人说

引用
==比较的是内存地址;
equals比较的是内容。



这种说法是不严谨的。
首先我们看下java中object中的源码。因为所以的类都继承了object这个类。那么方法也是了
object.java中的eauqls方法如下:


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


看完代码发现。在object类中。equals和==是没有任何区别的。都比较的是内存地址。也就是说。都是比较两个引用是否指向同一个对象。是则返回true。否则返回false

那为什么很多人说比较对象呢。因为很多都虽然继承了object类。但是它们很多都重写了equals方法

最典型的就是string类
看string类中的equals方法

public boolean equals(Object anObject) {

	if (this == anObject) {
	    return true;
	}

	if (anObject instanceof String) {
	    String anotherString = (String)anObject;
	    int n = count;
	    if (n == anotherString.count) {
		char v1[] = value;
		char v2[] = anotherString.value;
		int i = offset;
		int j = anotherString.offset;
		while (n-- != 0) {
		    if (v1[i++] != v2[j++])
			return false;
		}
		return true;
	    }
	}
	return false;
    }




根据引用取出内容。然后逐个比较。相同返回true。否则false
现在明白了。原来根据类的不同equals方法比较的东西也不尽相同。
再看list的抽象类AbstractList

public boolean equals(Object o) {

	if (o == this)
	    return true;
	if (!(o instanceof List))
	    return false;

	ListIterator e1 = listIterator();
	ListIterator e2 = ((List) o).listIterator();
	while(e1.hasNext() && e2.hasNext()) {
	    E o1 = e1.next();
	    Object o2 = e2.next();
	    if (!(o1==null ? o2==null : o1.equals(o2)))
		return false;
	}

	return !(e1.hasNext() || e2.hasNext());

    }


同样重写了equals方法。然后迭代判断两个list是否相同。
所以再有人问你==和equals方法的区别。你就不会迷糊了吧。

分享到:
评论

相关推荐

    java程序[文].pdf

    程序中的一个错误是`s2.eauals("+")`,应该是`s2.equals("+")`,这是检查字符串是否相等的正确方法。 6. 用户输入处理:第六个程序`Jiafa`也处理用户输入,但这里的目的是获取两个整数并进行计算。程序尝试读取两个...

    Android项目中实体类entity的作用详解

    4. 重写父类中的eauals()方法和hashcode()方法。 实体类的种类: A. 属性类,通常定义在model层里面。 B. 一般的实体类对应一个数据表,其中的属性对应数据表中的字段。 C. 让程序员在对数据库操作的时候不用写SQL...

    STM32步进电机四轴运动控制源码揭秘:包括相对绝对定位、回原点、梯形加减速等功能揭秘及F103和F405实现策略

    内容概要:本文详细介绍了基于STM32F103和F405的四轴步进电机控制系统源码。主要内容涵盖定时器配置、相对运动、绝对运动、回原点以及梯形加减速控制的实现方法。文中对比了两款芯片在性能和代码实现上的差异,强调了硬件选型对控制效果的影响。此外,还讨论了梯形加减速的具体实现步骤及其重要性,绝对和相对运动模式的实现逻辑,以及回原点的不同实现方案。最后,文章提到了一些调试技巧和注意事项,如使用DMA减轻CPU负担、避免浮点运算带来的误差等。 适合人群:具有一定嵌入式开发经验的研发人员,尤其是对STM32和步进电机控制感兴趣的工程师。 使用场景及目标:适用于需要进行多轴步进电机控制的工程项目,如CNC机床、3D打印设备等。目标是帮助开发者理解和掌握STM32在步进电机控制方面的应用,提高系统的稳定性和效率。 其他说明:文中提供了大量代码片段作为实例,便于读者更好地理解具体实现。同时,作者分享了许多实践经验,有助于解决实际开发过程中可能遇到的问题。

    mybatis-3.0.1.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    酷信通讯系统:革新版tio3.6.2的性能超越与开源代码的创新体验

    内容概要:本文深入探讨了酷信即时通讯应用在2022年的技术创新,涵盖多个关键技术点。首先介绍了TIO版本从3.2.8升级到3.6.2所带来的显著性能提升,特别是在消息推送方面的优化,如引入消息队列机制,提高了消息推送的稳定性和效率。其次讨论了文件存储解决方案的选择,酷信摒弃传统的FastDFS,转向MinIO,实现了更简便的部署和更高的稳定性。最后强调了酷信通信端代码的全面开源,允许开发者参与改进,形成了良好的技术生态系统。此外,文中还展示了具体的代码示例,帮助读者更好地理解和应用这些技术。 适合人群:对即时通讯技术和分布式系统感兴趣的软件工程师和技术爱好者。 使用场景及目标:适用于希望深入了解即时通讯系统内部运作机制的人士,尤其是关注高性能、高可靠性和可扩展性的技术人员。通过学习酷信的技术实现,能够为自身项目的架构设计提供有价值的参考。 其他说明:文章不仅限于理论讲解,还包括大量实用的代码片段,便于读者实践操作。同时,开源策略使得酷信成为了一个优秀的学习样本,鼓励更多的开发者参与到即时通讯领域的创新中来。

    LabVIEW Excel读取:采用状态机架构与ActiveX方式实现高效数据读取

    内容概要:本文详细介绍了利用LabVIEW进行Excel文件读取的方法,主要采用了状态机架构和ActiveX技术。状态机用于管理不同操作阶段之间的平滑过渡,而ActiveX则负责与Excel应用程序进行通信。文中展示了如何通过状态机实现Excel文件的初始化、打开、遍历Sheet页以及数据处理等功能,并强调了不依赖完整Office套装的特点。此外,还探讨了动态创建选项卡和表格控件的技术细节,以及使用引用传递减少内存占用的有效措施。同时,针对可能出现的问题提供了相应的解决办法,如确保Excel进程正确关闭和处理隐藏Sheet页的方式。 适合人群:对LabVIEW有一定了解并希望深入掌握其与外部软件(如Excel)交互能力的工程师和技术爱好者。 使用场景及目标:适用于需要频繁处理大量Excel数据的企业级应用场景,特别是在那些无法安装完整Office套件的环境中。通过本方案可以快速读取Excel文件内容并在LabVIEW界面上直观展示,提高工作效率。 其他说明:本文不仅提供了一种创新性的LabVIEW与Excel交互解决方案,而且对于状态机的设计思路也有详细的阐述,有助于读者更好地理解和应用这一重要概念。

    移动端安全测试_虚拟化模拟器动态注入_多架构多版本指纹浏览器环境修改_通过底层配置修改和分布式测试实现浏览器指纹完美伪装与真机环境一致性验证的云计算级自动化测试平台_用于大规模移动.zip

    移动端安全测试_虚拟化模拟器动态注入_多架构多版本指纹浏览器环境修改_通过底层配置修改和分布式测试实现浏览器指纹完美伪装与真机环境一致性验证的云计算级自动化测试平台_用于大规模移动

    Screenshot_20250504_192300.jpg

    Screenshot_20250504_192300.jpg

    aws-java-sdk-s3-1.12.255.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    智能穿戴设备开发_Flutter跨平台开发_Android_WearOS_智能手表应用_哔哩哔哩API接口调用_视频流媒体处理_用户界面适配_手势操作优化_在智能手表上实现哔哩哔哩.zip

    智能穿戴设备开发_Flutter跨平台开发_Android_WearOS_智能手表应用_哔哩哔哩API接口调用_视频流媒体处理_用户界面适配_手势操作优化_在智能手表上实现哔哩哔哩

    mybatis-3.4.1.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    HChenX_AutoSEffSwitch_12888_1745869156796.zip

    HChenX_AutoSEffSwitch_12888_1745869156796

    iOS移动应用开发_Swift5UIKitAlamofireKingfisherSnapKit_百思不得姐API接口调用首页推荐段子图文视频播放评论互动用户中心.zip

    iOS移动应用开发_Swift5UIKitAlamofireKingfisherSnapKit_百思不得姐API接口调用首页推荐段子图文视频播放评论互动用户中心

    thymeleaf-1.1.5.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    智能穿戴设备开发_Android_SDK_Geakwear_第三方开发者工具包_用于快速开发兼容Geakwear和Android_Wear的智能手表应用_包含数据通信_消息推送_健.zip

    智能穿戴设备开发_Android_SDK_Geakwear_第三方开发者工具包_用于快速开发兼容Geakwear和Android_Wear的智能手表应用_包含数据通信_消息推送_健

    Matlab调制解调与OFDM、OTFS技术仿真:16QAM、QPSK、LDPC与Turbo码在高斯白噪声及频率选择性衰落信道下的误比特率性能分析(含保护间隔与信道均衡算法实现代码详解)

    内容概要:本文详细介绍了如何使用MATLAB进行OFDM和OTFS调制解调及其在高斯白噪声(AWGN)和频率选择性衰落信道下的性能仿真。文中涵盖了16QAM、QPSK调制,LDPC和Turbo信道编码的具体实现,并讨论了保护间隔(CP)和信道均衡(如ZF、MMSE)的方法。此外,还简要介绍了OTFS作为一种新兴调制技术的优势及其与时频域处理的区别。通过详细的代码示例和理论解释,展示了不同调制方式、编码技术和信道条件下误比特率(BER)的变化情况。 适合人群:通信工程专业的学生、研究人员以及从事无线通信系统开发的技术人员。 使用场景及目标:①理解和掌握OFDM和OTFS的基本原理和技术细节;②评估不同调制方式、信道编码和信道条件对通信系统性能的影响;③为实际通信系统的优化设计提供参考依据。 其他说明:附带完整的MATLAB代码包,包括OFDM/OTFS发射接收链、多径信道模型、多种均衡器实现和BER测试框架等,便于读者动手实践。

    【Linux内核开发】调试方法框架全解析:从准备工作到高级工具的应用与优化

    内容概要:本文深入探讨了Linux内核开发调试方法框架,全面覆盖了从前期准备到具体调试工具和技术的应用。文章首先介绍了Linux内核的重要性及其开发挑战,强调了调试在内核开发中的关键作用。随后,详细阐述了调试前的必备工作,包括确认bug的存在、了解内核版本号、深入理解内核代码、确保bug可复现以及最小化系统。接着,文章介绍了内核调试配置选项,如“Magic SysRq key”和“Kernel debugging”等关键配置项,以及调试原子操作的设置。在引发bug与打印信息方面,讲解了BUG()和BUG_ON()宏、dump_stack()函数的作用,并深入解析了printk()函数的健壮性、局限性及LOG等级设定。文件系统如procfs、sysfs和debugfs在调试中的应用也被详细说明。最后,介绍了ftrace与trace-cmd、kprobe与systemtap、KGDB与KGT等调试工具和技术。; 适合人群:具备一定Linux基础知识和编程经验的研发人员,尤其是从事操作系统开发、内核优化或嵌入式系统开发的工程师。; 使用场景及目标:①帮助开发者在内核开发过程中快速定位和解决bug;②提升对内核代码的理解,掌握内核调试的常用工具和方法;③通过实际案例和具体技术手段,提高内核开发的效率和稳定性。; 其他说明:本文不仅提供了理论知识,还结合了大量实际案例和具体操作步骤,旨在帮助读者全面掌握Linux内核调试的精髓。随着技术的进步,未来内核调试有望借助AI和机器学习实现智能化和自动化,进一步提升调试效率。

    电子商务平台_SpringBoot20_SpringCloudFinchley_SpringCloudAlibaba_微服务架构_RBAC权限管理_OAuth2认证_JWT令牌_.zip

    电子商务平台_SpringBoot20_SpringCloudFinchley_SpringCloudAlibaba_微服务架构_RBAC权限管理_OAuth2认证_JWT令牌_

    流媒体传输技术_RTMP客户端SDK_H264H265视频解码_跨平台音视频采集组件_全架构兼容性工具_支持WindowsLinuxAndroidiOSARM_提供稳.zip

    流媒体传输技术_RTMP客户端SDK_H264H265视频解码_跨平台音视频采集组件_全架构兼容性工具_支持WindowsLinuxAndroidiOSARM_提供稳

    mybatis-3.0.3.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

Global site tag (gtag.js) - Google Analytics