你真的知道equals()与==的区别吗?
一、“==”
1、使用范围:基本数据类型和引用数据类型
2、比较两个基本数据类型:比较的是数据是否相同
int a = 5;
float b = 5.0F;
char c = '5';
double d = 5.00;
System.out.println(a == b);//true
System.out.println(a == c);//false
System.out.println(a == d);//true
3、比较两个引用数据类型:比较的是两个引用的地址是否相同
String s1 = new String("hello");
String s2 = new String("hello");
String s3 = "hello";
String s4 = "hello";
System.out.println(s1 == s2);//false
System.out.println(s3 == s4);//true
System.out.println(s1 == s3);//false
至于s3 == s4为什么为true,这就不做过多解释了。
二、equals()
1、只能适用于引用数据类型
2、equals()是一个方法,而不是运算符
3、object中的equals()的定义:
public boolean equals(Object obj) {
return (this == obj);
}
注意:由Object类中定义的equals()方法可知:在Object中equals()和==的作用是相同的,都用于比较两个对象的地址值是否相同。
当同一个类创建的两个对象具有相同的属性值时,若此对象未重写Object中的equals()方法,此时比较的是两个对象的地址,因此对象不相等。
三、一些常用的重写了equals()的类:Date、Point、String、File、包装类
重写了0bject类中的equals()方法。重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。
四、重写原则
- 对称性:如果x.equals(y)返回是“true ”,那么y.equals(x)也应该返回是“true”。
- 自反性:x.equals(x)必须返回是“true”。
- 传递性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也应该返回是“true”。
- 一致性:如果x.equals(y)返回是“true”,只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是“true”。
任何情况下,x.equals(null),永远返回是“false”;x.equals(和lx不同类型的对象)永远返回是“false”。
通常情况下,自定义的类如果使用equals()的话,也通常是比较两个对象的"实体内容"是否相同。那么,就需要对Object类中的equals( )进行重写。
重写的原则:比较两个对象的实体内容是否相同.
针对文章可能存在的一些不足之处,请大佬指出,经核实以后会尽快对文章进行修改,感谢您的支持!!!