操作符 == 与 equals 方法
操作符 ==
-
基本类型比较值:只要两个比变量的值相等,即为 true
int a = 5; System.out.println(a == 5); //true System.out.println(a == 6); //false
-
引用类型比较引用(是否指向同一个对象):只有指向同一个对象的时候,才会返回 true。
Person p1 = new Person(); Person p2 = new Person(); System.out.println(p1 == p2); //false //------------------------------------------- p1 = p2; System.out.println(p1 == p2); //true
-
使用操作符 == 进行比较时,符号两边的数据类型必须兼容(可以自动转换的基本数据类型除外),否则编译出错。
equals() 方法
所有类都继承了 Object,也就获得了 equals() 方法,同时也可以重写 equals() 方法。
-
只能比较引用类型,起作用与操作符 == 相同,都是比较是否指向同一个对象,也就是对象的内存地址。( obj1.equals(obj2) )
-
特殊情况:当用 equals() 方法进行比较时,对类 File、String、Date及包装类(Wrapper Class)来说,是比较类型及内容而不用考虑引用的是否同一个对象。因为这些类中重写了 Object 类的 equals() 方法。
String s1 = "zhangsan"; String s2 = "zhangsan"; System.out.println(s1 == s2); // false System.out.println(s1.equals(s2)); // true //当用 equals() 方法进行比较时,对类 File、String、Date及包装类(Wrapper Class)来说,是比较类型及内容而不用考虑引用的是否同一个对象。
-
如果想改变某一个类的 equals() 方法,不想用 equals 来比较对象的内存地址,那就重写 equals() 方法。