人之所以痛苦,那是因为你在成长。--------magic_guo
“==” 与 equals()方法都是对两个对象进行比较,但是它们的使用方法又不相同,下面来看具体的区别:
/*
* ==:
* 是一个运算符
* 可以使用在基本数据类型中和有引用数据类型中;
* 在基本数据类型中比较的是对象的数据值(不一定要类型相同,但是不能与boolean型作比较)
* 在引用数据类型中比较的是两个对象的地址是否相同、即两个在栈中引用在是否指向堆中同一个对象实体
*
* equals():
* Object类中的一个方法
* 只适用于引用数据类型
* Object类中的equals()的比较还是使用的“==”运算符;
* 在Date、String、File、包装类等都重写了equals()方法,重写以后,比较的不再是地址值,而是比较数据值;
*
*
* */
import java.util.Date;
public class EqualTest {
public static void main(String[] args) {
int i = 10;
int j = 10;
double k = 10.0;
System.out.println(j == k);//true
System.out.println(i == j);// true
char c = 10;
System.out.println(i == c);// true
char c1 = 'A';
char c2 = 65;
System.out.println(c1 == c2);//true
Person p1 = new Person(18, "Jane");
Person p2 = new Person(18, "Jane");
System.out.println(p1 == p2);//false
String s = new String("ll");
String s1 = new String("ll");
System.out.println(s == s1);// false
System.out.println("***************************************");
// equals()
System.out.println(p1.equals(p2));// false
/*
* 为什么别的类使用equals()方法,都返回true,而Person类却返回false
* 解释:Object是所有类的父类,Person类继承了Object类的equals()方法
* Object类中的equals()方法:
* public boolean equals(Object obj) {
return (this == obj);
}
说明在Object类中,使用的也是==运算符来比较两个对象,而==运算符在引用数据类型中,比较的是两个对象的地址值,
因此返回false;
* */
System.out.println(s1.equals(s));// true
Date d1 = new Date(123456l);
Date d2 = new Date(123456l);
System.out.println(d1.equals(d2)); // true
/*
* 那为什么使用String、Date类中的equals()方法来比较两个对象,返回的确实true?
* 解释:
* 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;
}
Date类中的equals()方法:
public boolean equals(Object obj) {
return obj instanceof Date && getTime() == ((Date) obj).getTime();
}
根据源码分析:虽然这两个类都继承了Object类,但是他们重写了equals()方法,进而来比较的是两个对象的数据值,
* 因此返回true。
* */
}
}
class Person{
private int age;
private String name;
public Person(int age, String name){
this.name = name;
this.age = age;
}
}
结果:
true
true
true
true
false
false
***************************************
false
true
true
不到之处,请多多批评指正!