== :运算符
- 可以使用在基本数据类型变量和引用类型变量中;
- 如果比较的是基本数据类型变量,比较两个变量保存的数据是否相等(不一定类型相同,可以自动类型提升);
eg:
int i = 10;
int j = 10;
double d = 10.0;
System.out.println(i==j);//true
System.out.println(i==d);//true,自动类型提升
- 如果比较的是引用数据类型,比较的是两个对象的地址值是否相等,即两个引用是否指向同一个对象实体;
注:使用" == "时,必须保证两边的变量类型一致,否则编译不通过;
eg:
System.out.println("hello" == new java.util.Date());
equals():方法
- 是一个方法,不是运算符
- 只适用于引用数据类型
- Object类的equals()方法源码:
public boolean equals(Object obj){
return (this == obj);
}
注:Object类中定义的equals()和==作用相同
- String、Date、File、包装类等都重写了Object类中的equals()方法。重写后,比较的不是两个引用地址是否相同,而是比较两个对象的“实体内容”是否相同(String,Date等内部属性是否相同)
- 通常情况下,自定义的类,如果使用equals()的话,也通常比较的两个对象的“实体内容”是否相同;
就需要对object类中的equals()进行重写。
eg: String对equals() 重写的源码:
public boolean equals (Object anobject) {
if (this == anobject) {
return true ;
}
if (anobject instanceof String) {
String anotherstring = (String) anobject;
int n = value.length;
if (n == anotherstring.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0 {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}