==
: 它的作⽤是判断两个对象的地址是不是相等。即,判断两个对象是不是同⼀个对象(基本数据类型==⽐较的是值,引⽤数据类型==⽐较的是内存地址)。
equals()
: 它的作⽤也是判断两个对象是否相等。但它⼀般有两种使⽤情况:
- 情况 1:类没有覆盖
equals()
⽅法。则通过equals()
⽐较该类的两个对象时,等价于通过==
⽐较这两个对象。 - 情况 2:类覆盖了
equals()
⽅法。⼀般,我们都覆盖equals()
⽅法来⽐较两个对象的内容是否相等;若它们的内容相等,则返回true
(即,认为这两个对象相等)。
举个例⼦:
public class test1 {
public static void main(String[] args) {
String a = new String("ab");
// a 为⼀个引⽤
String b = new String("ab");
// b为另⼀个引⽤,对象的内容⼀样
String aa = "ab";
// 放在常量池中
String bb = "ab";
// 从常量池中查找
if (aa == bb) // true
System.out.println("aa==bb");
if (a == b) // false,⾮同⼀对象
System.out.println("a==b");
if (a.equals(b)) // true
System.out.println("aEQb");
if (42 == 42.0) {
// true
System.out.println("true");
}
}
}
说明:
String
中的equals
⽅法是被重写过的,因为object
的equals
⽅法是⽐较的对象的内存地址,⽽String
的equals
⽅法⽐较的是对象的值。- 当创建
String
类型的对象时,虚拟机会在常量池中查找有没有已经存在的值和要创建的值相同的对象,如果有就把它赋给当前引⽤。如果没有就在常量池中重新创建⼀个String
对象。
留言