Java中==和equals的区别

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

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

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

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

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

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

java 复制代码
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的作用就是比较地址是否相同

java 复制代码
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(内容相同)
相关推荐
做个文艺程序员几秒前
第02篇:搭建 ES 集群 + Spring Boot 整合实战——从 Docker Compose 到 Java 客户端全覆盖
java·spring boot·elasticsearch
Jinkxs1 分钟前
LoadBalancer- 简单限流策略:Nginx 基于连接 / 请求的限流实现
java·运维·nginx
fenglllle9 分钟前
JDK8升级JDK17使用CompletableFuture在线程中classloader的变化
java·开发语言·jvm
计算机安禾9 分钟前
【c++面向对象编程】第44篇:typename与class的区别,依赖类型名与template消除歧义
java·jvm·c++
froginwe1110 分钟前
Scala 正则表达式
开发语言
时寒的笔记11 分钟前
11期_js逆向核心案例解析(sichuan&某理财网)
开发语言·javascript·ecmascript
csbysj202013 分钟前
PHP 文件:深入解析与最佳实践
开发语言
JAVA面经实录91718 分钟前
Java+SpringAI企业级实战项目完整官方文档(生产终版)
java·开发语言·spring·ai编程
梵得儿SHI18 分钟前
Java IO 流进阶:Buffer 与 Channel 核心概念解析及与传统 IO 的本质区别
java·开发语言·高并发·nio·channel·buffer·提升io效率
j_xxx404_21 分钟前
Linux线程:从内存分页机制(Page Table/TLB/Page Fault)彻底读懂 Linux 线程本质
linux·运维·服务器·开发语言·c++·人工智能·ai