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

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(内容相同)

相关文章:

  • 理解JavaScript中map和parseInt的陷阱:一个常见的面试题解析
  • sklearn 和 pytorch tensorflow什么关系
  • 12.vite,webpack构建工具
  • 【Linux 学习计划】-- 简易版shell编写
  • 刷题记录(7)二叉树
  • 六、【ESP32开发全栈指南:深入解析ESP32 IDF中的WiFi AP模式开发】
  • 欧拉定理和费马定理
  • Gerrit+repo管理git仓库,如果本地有新分支不能执行repo sync来同步远程所有修改,会报错
  • 飞牛使用Docker部署Tailscale 内网穿透教程
  • 【Linux基础知识系列】第十四篇-系统监控与性能优化
  • 校招 Java 面试基础题目解析学习指南含新技术实操要点
  • [特殊字符]解决 “IDEA 登录失败。不支持早于 14.0 的 GitLab 版本” 问题的几种方法
  • 51单片机——计分器
  • 【51单片机】0. 基础软件安装
  • 构建 MCP 服务器:第 2 部分 — 使用资源模板扩展资源
  • [蓝桥杯]采油
  • 影楼精修-AI衣服祛褶皱算法解析
  • Pytorch安装后 如何快速查看经典的网络模型.py文件(例如Alexnet,VGG)(已解决)
  • 中小制造企业的数字化转型,如何控制工业软件应用成本?
  • 中国制造名牌剃须刀:优质之选,情礼佳物
  • 惠州做网站多少钱/南昌搜索引擎优化
  • 做做网站需要多少钱/广告公司排名
  • 外国人做中国数学视频网站/太原百度快速优化排名
  • 北京市公共资源交易服务平台/seo引擎搜索网站
  • 凡科网做网站教程/网站流量查询工具
  • 医院做网站的费用多少/短视频培训