a == b 和 a.equals(b) 在Java(以及许多其他面向对象编程语言中)用于比较两个对象或值,但它们之间存在本质的区别,这主要取决于它们所比较的对象类型:
-
a == b:- 这是一种基本类型比较或对象引用比较。
- 如果
a和b是基本数据类型(如int、float、char等),那么a == b会比较它们的值是否相等。 - 如果
a和b是对象引用(即它们指向堆内存中的对象),那么a == b会比较这两个引用是否指向内存中的同一个对象(即它们的内存地址是否相同)。
-
a.equals(b):- 这是一个方法调用,用于比较两个对象的内容是否相等。
- 默认情况下,
Object类中的equals方法比较的是对象的引用(即和==在对象引用比较时相同)。但是,许多类(如String、Integer等)都重写了equals方法,以提供基于对象内容的比较。 - 因此,当你使用
a.equals(b)时,如果a和b不是同一个类的实例,或者这个类没有重写equals方法,则可能会抛出ClassCastException(如果equals方法没有被正确重写以处理不同类的情况)或仅基于引用进行比较(如果equals方法未被重写)。 - 重要的是要注意,
equals方法通常要求传入的对象不为null,否则可能会抛出NullPointerException。因此,在使用equals方法之前,最好先检查对象是否为null。
示例:
String a = new String("hello");
String b = new String("hello");
// 使用 == 比较对象引用
System.out.println(a == b

最低0.47元/天 解锁文章
277

被折叠的 条评论
为什么被折叠?



