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

Java中==和equals的区别

==(==可以用于比较基本类型和引用类型)

基本类型:==比较(byte/short/int/long/float/double/char/boolean)时直接比较值是否相等

例如:
char c1 = 'A';
char c2 = 'A';
System.out.println(c1 == c2); // true(字符编码值相等)

引用类型: ==比较对象的内存地址是否相同(即是否指向同一个对象)。

String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2); // false(地址不同)每次调用 new 都会在堆内存中创建一个新的 String 对象,即使内容相同,地址也不同。
特殊情况:Integer 的缓存机制

对于 Integer 对象,当值在 -128 到 127 之间时,会复用缓存对象,导致 == 也返回 true

Integer a = 100; // 自动装箱,实际调用 Integer.valueOf(100)
Integer b = 100;
System.out.println(a == b); // true(缓存复用,地址相同)
​
Integer c = 200;
Integer d = 200;
System.out.println(c == d); // false(超出缓存范围,地址不同)

equals(Object方法)只适用于引用类型如 StringInteger

equals本质上和==是一样的都是比较的对象的地址是否相同,而String中 equals比较的是字符串的值是否相同是因为String重写了 equals方法,所以 equals的作用取决于子类是否重写 equals方法,不然 equals的作用就是比较地址是否相同

public boolean equals(Object obj) {return (this == obj); // Object类的原始实现
}
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1.equals(s2)); // true(内容相同)

http://www.xdnf.cn/news/12473.html

相关文章:

  • 如何使用索引和条件批量更改Series数据
  • VS如何编译QuaZip库
  • MPO接口型光模块的失效检测
  • boost::qvm 使用示例
  • EtherNet/IP转DeviceNet协议网关详解
  • 手机号段数据库的作用
  • 【技术】跨设备链路聚合的技术——M-LAG
  • 扫地机器人舵机方案升级,舵机品牌伟创动力Kpower方案评测
  • MS31912TEA 多通道半桥驱动器 氛围灯 照明灯 示宽灯 转向灯驱动 后视镜方向调节 可替代DRV8912
  • UFC911B108 3BHE037864R0108
  • 电工基础【8】常用的电气元件符号
  • 发版前后的调试对照实践:用 WebDebugX 与多工具构建上线验证闭环
  • 五子棋网络对战游戏的设计与实现设计与实现【源码+文档】
  • c++ set与multiset的介绍
  • ​​TPS3808​​低静态电流、可编程延迟电压监控电路,应用笔记
  • 2025服装收银系统推荐:智能管理助力服装商家高效经营
  • 中医的十问歌和脉象分类
  • 原理图与 PCB 设计流程及注意事项
  • vue组件的data为什么是函数?
  • Python_标记一带一路各个国家
  • 【Ragflow】26.RagflowPlus(v0.4.0):完善解析逻辑/文档撰写模式全新升级
  • API标准的本质与演进:从 REST 架构到 AI 服务集成
  • 26.【新型数据架构】-零ETL架构
  • 22N60-ASEMI光伏逆变器专用22N60
  • python时间操作笔记
  • Flux ControlNet工作流详细教程
  • 蓝桥春晚魔术(欧拉定理+快速幂)
  • CETOL 6σ v12.1 三维公差分析软件现已可供下载
  • 有意向往gis开发靠,如何规划学习?
  • virtualbox 如何虚拟机ip固定