==和equals()的区别
一、==的使用:
如果比较的是基本数据类型变量:比较两个变量存储的数据是否相等。(不一定数据类型相同)
int i = 10;
int j = 10;
double b = 10.0;
System.out.println(i == j); //ture,值相等
System.out.println(i == b); //ture,类型提升
如果比较的是引用数据类型变量:比较两个对象的地址值是否相同。
Person aa = new Person();
Person bb = new Person();
System.out.println(aa == bb); //false,地址不相同
二、equal()的使用:
仅适用于引用数据类型。
第一种情况。
public void method2(){
Person aa = new Person("tom",21);
Person bb = new Person("tom",21);
System.out.println(aa.equals(bb));//false
}
这里的equals()是Object类下的方法。
(String类中的equals()方法如下:)
public boolean equals(Object obj) {
return (this == obj);
}
这里和==的用法一样,都是比较地址值。
第二种情况。
public void method2(){
String s1 = new String("asd");
String s2 = new String("asd");
boolean c1 = s1.equals(s2);
}
这里的equals()用的是String类的方法。
(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;
}
逐个比较每一位是否相等。
String,Date,File,包装类等都重写了Object中的equals()方法。重写以后,比较的不再是地址值,而是两个对象的“实体内容”是否相同。