在java中,==与equals()都是用来比较引用,只是==即可以比较基本类型,也可以比较对象,而equals()则只能在对象之间进行引用比较。
先来了解一下==运算符,分析一下语句执行结果:
int num1 = 10;
int num2 = 10;
System.out.println(num1 == num2); //打印true
String str1 = new String("123");
String str2 = new String("123");
System.out.println(str1 == str2); //打印false
可以看出,由于基本类型不是对象,即不存在引用,所以==运算符只会比较两个基本类型的值,但当==作用于对象时,我们可以通过第二条打印语句发现,虽然str1与str2都是引用相同的值"123",但是这两个对象分别是引用两个不同内存地址的值,即引用不相同,因此str1 == str2返回false,==作用于对象时,比较的是两个对象的引用是否相同!
==运算符进行等值比较。也就是说,对于任何引用值X和Y,当且仅当X和Y指向同一对象时, X==Y返回真。
Java.lang包中的Object类有public boolean equals(Object obj)方法。它也比较两个对象是否相等。仅当被比较的两个引用指向同一对象时,对象的equals()方法返回true。
Object类的equals( )方法很少被使用,因为,多数情况下我们希望比较两个对象的内容,而不是判断两个引用是否指向同一对象。
String类中的覆盖equals()方法返回true,当且仅当参数是一个不为null 的String对象,该对象与调用该方法的String对象具有相同的字符顺序。例如:
String s1 = new String("JDK1.2");
String s2 = new String("JDK1.2");
方法s1.equals(s2)返回真,尽管s1和s2指向两个不同的对象。
下面的例子使用equals方法测试雇员的名字和生日:
public class Employee {
private String name;
// private Mydate birthDate;
private float salary;
public Employee(String name, float salary) {
this.name = name;
// this.birthDate = Dob;
this.salary = salary;
}
public boolean equals(Object o) {
boolean result = false;
if ((o != null) && (o instanceof Employee)) {
Employee e = (Employee) o;
if (name.equals(e.name)) {
result = true;
}
}
return result;
}
public int hashCode() {
return (name.hashCode());
}
}
我们覆盖了hashCode方法。这样做保证了相同的雇员对象有相同的hashCode。
下面的程序判断两个雇员对象引用是否相同:
public class TestEquals {
public static void main(String[ ] args){
Employee emp1 = new Employee("Fred Smith", 25000.0F);
Employeeemp2 = new Employee("Fred Smith", 25000.0F);
if(emp1 == emp2){
System.out.println("emp1 is identical to emp2")'
}else{
System.out.println("emp1 is not identical to emp2")'
}
if(emp1.equals(emp2) ){
System.out.println("emp1 is equals to emp2")'
}else{
System.out.println("emp1 is not equals to emp2")'
}
emp2 = emp1;
System.out.println("set emp2 = emp1");
if(emp1 == emp2){
System.out.println("emp1 is identical to emp2")'
}else{
System.out.println("emp1 is not identical to emp2")'
}
}
}
执行结果为:
emp1 is not identical to emp2
emp1 is equals to emp2
set emp2 = emp1
emp1 is identical to emp2
更多 Java视频教程