最开始接触Java的时候,比较对象是否相同的时候,总是纠结于是使用equals还是==,之前写了一篇博客以为自己总结对了。直到最近才发现自己之前说得是错的。所以今天特意把这篇博客从新编辑一下,免得误导自己和别人。
对于基本数据类型(byte,int,short,long,float,double)是否相等时,只能使用==和!=来判断两个变量是否相等。但是比较对象是否相等时,可以使用==,这个时候比较的是两个变量是否引用的是同一个对象。equals方法进行对象比较时,默认也是比较两个变量是否引用同一个对象;但是java中提供的很多对象重写了equals方法,比较的是对象的值是否相同如Integer,String对象。下面来看例子:
package com.test.model;
public class Student {
int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package com.test;
import com.test.model.Student;
public class Test {
public static void main(String[] args) {
Student stu1=new Student();
Student stu2=new Student();
stu1.setAge(26);
stu2.setAge(26);
//Student没有重写equals方法,而equals方法默认是比较对象引用是否相同
System.out.println(stu1.equals(stu2));
Integer int1=new Integer(11);
Integer int2=new Integer(11);
//Integer重写了equals方法
System.out.println(int1.equals(int2));
System.out.println(int1==int2);
}
}
输出结果:
false
true
false
下面是Integer类中重写的equals方法: public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}可以看出Integer类中重写的equals方法比较的是对象的值是否相同。
本文探讨了Java中equals方法与==操作符的区别,重点分析了它们在基本数据类型及对象比较中的应用。通过具体示例说明了不同情况下两者的实际效果,并详细解释了Integer类如何重写equals方法。

被折叠的 条评论
为什么被折叠?



