面试题:==和equals()的区别
==:运算符
1.可以使用在基本数据类型和引用数据类型变量中
2.如果比较的是基本数据类型变量:比较两个变量保存的数据是否相等(不一定类型要相同)
如int i=10; double j=10.0;则i==j返回true;
3.如果比较的是引用数据类型的变量:比较的是两个对象的地址在是否相同,即两个引用是否指向堆区的同一个空间
如Person p1 = new Person(“TOM”,18);Person p2 = new Person(“TOM”,18);但是p1==p2返回false;
equals()方法使用:
1.是一个方法,而非运算符
2.只能适用于引用数据类型
3.Object类中equals()和==一样的,都是比较地址
4.像String,Date,File,包装类等都重写了Object类中的equals()方法,他们比较的是两个对象的内容是否相同,而不是比较地址。
5.我们自定义的类如果使用equals()的话,也通常是比较两个对象的内容是否相同,而不是地址,那么我们需要对equals()进行重写
class Person{
String name;
int age;
//override
public boolean equals(Object obj){
if(this == obj){
return true;//如果地址相同,则直接返回true
}
if(obj instanceof Person){//判断obj是否是Person类型的,如果是,再比较,不是的话直接返回false
Person p = (Person)obj;//如果obj是Person类型的,则强转成Person类型
//比较两个对象的每个属性
if(this.name.equals(p.name) && this.age == p.age){//必须写成this.name.equals(p.name),不能写成this.name == p.name;因为这样就又成比较name的地址了
return true;
}
}
return false;
}
}
自动生成equals()方法