外观
== 跟 equals 的区别
==
操作符
定义:
==
是一个双等号操作符,用于比较两个变量的值是否相等。基本数据类型比较:对于基本数据类型(如
int
、float
、char
等),==
比较的是它们的值。例如:
int a = 5;
int b = 5;
System.out.println(a == b); // 输出 true,因为值相等
- 引用数据类型比较:对于引用数据类型(如对象、数组等),
==
比较的是它们的内存地址(即引用)。如果两个变量指向同一个对象,则返回true
;否则返回false
。例如:
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1 == s2); // 输出 false,因为它们是不同的对象
equals
方法
定义:
equals
是一个方法,定义在Object
类中,用于比较两个对象的内容是否相等。默认行为:在
Object
类中,equals
的默认行为是使用==
比较引用。但很多类(如String
、Integer
等)重写了equals
方法,使其比较对象的实际内容。使用场景:
equals
主要用于比较对象的内容是否相等,而不是它们的内存地址。例如:
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1.equals(s2)); // 输出 true,因为内容相同
==
和equals
的区别总结
特性 | == | equals |
---|---|---|
比较方式 | 比较值(基本类型)或引用(引用类型) | 比较对象的内容(通常重写后) |
适用范围 | 基本类型和引用类型 | 主要用于引用类型 |
性能 | 通常更快,因为它直接比较内存地址或值 | 可能更慢,因为需要逐个比较对象的内容 |
空值处理 | null == null 返回 true | 调用 null.equals() 会抛出 NullPointerException |
- 注意事项
不要混淆:在比较对象时,尽量使用
equals
,除非你明确需要比较引用。重写
equals
:如果你自己定义了一个类,并且希望比较对象的内容,需要重写equals
方法。==
的特殊情况:对于字符串常量池中的字符串,==
可能会返回true
,因为它们可能指向同一个对象。例如:
String s1 = "hello";
String s2 = "hello";
System.out.println(s1 == s2); // 输出 true,因为它们来自同一个常量池
总之,选择 ==
还是 equals
取决于你的需求:如果需要比较引用,用 ==
;如果需要比较内容,用 equals
。