当前位置: 首页 > news >正文

== 和 equals 的区别是什么?

== 和 equals() 在 Java 中都是用于比较两个对象,但它们之间存在显著的差异:

  1. 比较的内容
    • ==:这是 Java 中的基本比较运算符,对于基本数据类型(如 int, char, double 等),它比较的是值;对于引用类型(对象),它比较的是引用是否指向内存中的同一地址(即比较对象的引用是否相同)。
    • equals():这是 Object 类的一个方法,在 Java 的所有类中都继承了此方法。默认情况下,它的行为与 == 对于引用类型的比较一致,即比较对象的引用是否相同。但许多类(如 String、Integer 等)都重写了这个方法,使其按照对象的内容或属性进行比较,而不是比较引用。
  2. 使用场景
    • ==:当你想知道两个引用是否指向同一个对象时,应使用 ==
    • equals():当你想基于对象的内容或属性来判断两个对象是否“相等”时,应使用 equals()。例如,对于两个 String 对象,你可能想知道它们是否包含相同的字符序列,而不是它们是否指向相同的内存地址。
  3. 重写
    • ==:这是 Java 语言的基本运算符,不能重写。
    • equals():这个方法可以被重写。如果你定义了自己的类,并且想要基于对象的属性来判断两个对象是否相等,那么你应该重写 equals() 方法。
  4. 对称性和一致性
    • equals() 方法必须是对称的(即 a.equals(b) 应该与 b.equals(a) 返回相同的结果)和一致的(即多次调用 a.equals(b) 应该始终返回相同的结果,前提是对象 a 和 b 没有被修改)。而 == 对于引用类型的比较自然是满足这些条件的,因为它只是比较引用。
  5. 空值处理
    • 在使用 equals() 方法时,通常需要先检查对象是否为 null,以避免 NullPointerException。而 == 可以直接用于比较对象与 null

示例:

String s1 = new String("hello");  
String s2 = new String("hello");  
String s3 = s1;  System.out.println(s1 == s2); // false,因为 s1 和 s2 引用不同的对象  
System.out.println(s1.equals(s2)); // true,因为 s1 和 s2 的内容相同  System.out.println(s1 == s3); // true,因为 s1 和 s3 引用相同的对象  
System.out.println(s1.equals(s3)); // true,因为 s1 和 s3 的内容也相同
总结来说,== 和 equals()
 在 Java 中有不同的用途和行为。理解它们之间的区别对于编写正确和高效的 Java 代码至关重要。
http://www.lryc.cn/news/325208.html

相关文章:

  • VUE:内置组件<Teleport>妙用
  • ruoyi-nbcio-plus后端里mapstruct-plus和lombok的使用
  • 企业如何选择一个开源「好」项目?
  • c++算法学习笔记 (14) 并查集
  • import * as的使用
  • 微服务(基础篇-003-Nacos)
  • java数据结构与算法刷题-----LeetCode215. 数组中的第K个最大元素
  • Springboot 整合 Knife4j (API文档生成工具)
  • C语言---------strlen的使用和模拟实现
  • 【MATLAB源码-第168期】基于matlab的布谷鸟优化算法(COA)机器人栅格路径规划,输出做短路径图和适应度曲线。
  • 集合深入------理解底层。
  • 【阅读笔记】《硬笔书法艺术》
  • 5.5.5、【AI技术新纪元:Spring AI解码】使用PGvector设置向量存储及进行相似性搜索
  • EDR下的线程安全
  • 洛谷刷题 | B3623 枚举排列
  • 程序员35岁会失业吗?
  • RabbitMQ 安装保姆级教程
  • 【MySQL】InnoDB引擎
  • 小白如何兼职赚得第一桶金?六大网络赚钱方式助你轻松开启副业之旅
  • 富格林:出金不顺谨防虚假受害
  • Saltstack 最大打开文件数问题之奇怪的 8192
  • Appium Inspector 展示设备当前页面
  • PyQt:实现菜单栏的点击拖动效果
  • 力扣--并查集547.省份数量
  • leetcode35-Search Insert Position
  • API 接口渗透测试
  • oracle 19c单机版本补丁升级
  • 推荐系统的未来:大模型驱动的个性化推荐技术与挑战
  • Allegro许可管理工具
  • React函数组件Hook