贝利信息

在Java中==和equals有什么区别_Java基础比较方式解析

日期:2026-01-26 00:00 / 作者:P粉602998670
==是运算符,比较基本类型值或引用类型地址;equals()是Object方法,重写后比较内容。基本类型只能用==;引用类型用==比较内存地址,equals()默认比地址但常用类已重写为比内容;包装类在[-128,127]内缓存导致==偶发true,应始终用equals()判逻辑相等。

在Java中,==equals()根本不是同一类操作:一个是运算符,一个是继承自Object的方法;它们的比较目标不同,适用场景也完全不同。

基本类型只能用 ==,不能调用 equals

int、char、boolean 等 8 种基本数据类型不是对象,没有方法,因此不能写 5.equals(5)——这会直接编译失败。它们之间只能用 == 比较值:

引用类型用 == 比的是内存地址

String、Integer、ArrayList 或自定义类的对象,都是引用类型。== 判断的是两个变量是否指向堆中同一块内存:

equals 默认比地址,但常用类已重写为比内容

equals()Object 的方法,原始实现就是 return (this == obj);,和 == 效果一样。但很多 JDK 类重写了它:

包装类的 == 有陷阱,别依赖它判值相等

Integer、Byte、Character 在 [-128, 127] 范围内会缓存对象: