浅谈Java中==和equals()区别
== 运算符
- 可以使用在基本数据类型变量和引用数据类型变量中
- 如果比较的是基本数据类型变量,比较两个变量保存的数据是否相等(不一定要类型相同)
如果比较的是引用类型变量,比较的是两个变量的地址值是否相同,即两个引用是否指向同一个对象实体
equals(): 方法
- 只能适用于引用数据类型
- 在object中定义的equals()方法与==的作用是一样的,在String类中对equals()进行了重写
- 像String,Data,File包装类等都重写了Object类中的equals()方法,重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的内容是否相同
测试代码:
package test1;
class Test{
String name;
int age;
public Test(String name,int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Compare {
public static void main(String[] args) {
// ==测试
//基本数据类型
int i = 10;
int j = 10;
double d = 10.0;
System.out.println(i == j);//true
System.out.println(i == d);// 类型提升 true
char c = 10;
System.out.println(i == c);//true
char c1 = 'A';
char c2 = 65;
System.out.println(c1 == c2);//true
//引用类型
String str1 = new String("Compare");
String str2 = new String("Compare");
System.out.println(str1 == str2);//false
Test t1 = new Test("Wang",20);
Test t2 = new Test("Wang",20);
System.out.println(t1 == t2);//false
// equals()测试
System.out.println(t1.equals(t2));//false
System.out.println(str1.equals(str2));//true
}
}
我们可以看到在我们对自己创建的Test类的两个对象使用equals()方法时,输出的结果为false,这是因为Test默认继承自Object类,而Object类中equals()方法的作用效果与==相同,而像String这种包装类都重写了equals()方法,比较的不是两个引用的地址是否相同,而是比较两个对象的内容是否相同。
Object中的equals()方法:
String类中重写的equals方法():