java中判断两个引用是否指向同一对象必须用==运算符,它比较内存地址;equals()比较内容,关系运算符>、

Java 中判断两个引用是否指向同一对象,要用 == 运算符,而不是 .equals() 或其他关系运算符(如 、<code>> 等)。
== 用于比较引用是否指向同一个内存地址
在 Java 中,== 对于引用类型,比较的是两个变量中存储的**对象地址**是否相同。如果地址一致,说明它们指向堆中同一个对象。
- 即使两个对象内容完全一样(比如两个 new String("abc")),只要不是同一个实例,
==就返回false - 对于基本类型(如 int、char),
==比较的是值本身;对引用类型,它只认“是不是同一个对象”,不关心内容
equals() 是用来比较内容是否相等的
.equals() 是实例方法,默认行为(Object 类中)和 == 一样,但多数常用类(如 String、Integer、ArrayList)都重写了它,使其按逻辑意义比较内容。
-
new String("hello") == new String("hello")→false -
new String("hello").equals(new String("hello"))→true -
String a = "hello"; String b = "hello"; a == b→true(因为字符串常量池复用)
注意:关系运算符 、= 不能用于对象引用
Java 不允许对普通对象引用使用大小比较运算符(除非是实现了 Comparable 的类型并配合 compareTo 方法)。直接写 obj1 > obj2 会编译报错。
- 这些运算符只适用于数值型基本类型(int、double 等)或包装类在自动拆箱后(且不为 null)
- 想比较对象大小或顺序,应调用
compareTo()或自定义比较逻辑
安全判断同一对象的小技巧
当不确定引用是否为 null 时,用 == 仍是安全的——null == null 为 true,非 null 引用 == null 为 false。
- 推荐写法:
if (obj1 == obj2) { ... },简洁且高效 - 避免用
obj1.equals(obj2)判断同一性,因为可能抛出 NullPointerException - 若需同时判空又判等价,可用
Objects.equals(obj1, obj2)(它内部先用 ==,再调用 equals)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











