equals和==的区别
==比较的是两个对象的地址值,还可以用于比较两个原生数据的值是否相等。
而equals 不能用于比较两个原声数据是否相等,它是用于比较两个对象的。请参考源代码
public boolean equals(Object cc){
if(a==b)
return true;
else
return false;
}
例如
Person p1=new Person();
Person p2=new Person();
System.out.println(p1==p2);//false
System.out.println(p1.equals(p2));//false
那这样看起来当比较两个对象是否相同时和“==”没什么区别,但是假如有一群学生,我们通过判断他们的年龄
和姓名如果相等,我们判断这两个学生是同一人,这时如果直接
Student stu1=new stutent();
Studnet stu2=new student();
stu1.equals(stu2)结果为false,这显然不行,所以我们要复写equals方法来判断这两个学生是否为同一人
public class equalsTest
{
public static void main(String[] args)
{
Student stu1=new Student(20,"xiaoming");
Student stu2=new Student(20,"xiaoming");
System.out.println(stu1.equals(stu2));//true
System.out.println(stu1==stu2);//false
System.out.println("...........");
int a=1;
int b=1;
System.out.println(a==b);
//System.out.println(a.equals(b));
Person p1=new Person();
Person p2=new Person();
System.out.println(p1==p2);//false
System.out.println(p1.equals(p2));//false
}
}
class Student
{
private int age;
private String name;
Student(int age,String name)
{
this.name=name;
this.age=age;
}
public boolean equals(Student stu)
{
if(this.age==age & this.name==name)
return true;
else
return false;
}
}
我是这么理解的 ==用与判断两个对象的地址值是否相同,而equals是用于判断两个对象内容是否相同,我们由于各种需要
经常要重写Object的equals方法。
String类中的equals()方法:
public boolean equals(Object anObject)
{
//如果是同一个对象
if (this == anObject)
{
return true;
}
//如果传递进来的参数是String类的实例
if (anObject instanceof String)
{
String anotherString = (String)anObject;
int n = count;//字符串长度
if (n == anotherString.count) //如果长度相等就进行比较
{
char v1[] = value;//取每一个位置的字符
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) //对于每一位置逐一比较
{
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
String类中如何判断两个对象
个人总结:参考源代码可以得知,String类中的equals()方法比较的是两个字符串内容是否相同。
而== 比较的是两个String对象是否相同
所以
String s1=new String("aa");//创建了一个new String()和"aa"两个对象。
String s2="aa";
s1==s2;//false
s1.equals(s2);//true |
|