1.作用
- ==: 判断两个对象的地址是否相同, 即判断两个对象是否属于同一对象。注:基本数据类型==比较的是值, 引用数据类型==比较的是内存地址。
- equals():判断两个对象是否相等, 可分为以下两种情况
- 类没有覆盖equals()方法, 则通过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类型的对象时, JVM会在厂里池中查找有没有存在的值和要创建的值相同的对象, 如果有就把它赋给当前引用,如果没有常量池中重新创建一个String对象。