1.值类型和引用类型
2.自定义的类
如果是你自己定义的一个类没有覆写euqals方法,那么用equals和==是一样的,都是比较句柄地址,因为自定义的类是继承于object,而object中的
equals就是用==来实现的。若要重新定义两个对象的比较,需要重写equals()方法
例2:使用默认的equals方法,比较两个内容相同的对象
值类型:没有equals方法,只有==;
引用类型:使用equals和==两种形式比较;
==操作比较的是两个变量的值是否相等,即是否指向堆内存中的同一对象;equals比较两个变量实际指向的堆中的内容是否相同。例1:以String类为例,s1,s3指向堆中同一段地址,s2指向堆中另一段地址,但存储的内容和s1,s3相同;
public class EqualTest {
public static void main(String[] args){
String s1="lpq";
String s2=new String("lpq");
System.out.println(s1.equals(s2));
System.out.println(s1==s2);
String s3="lpq";
System.out.println(s1.equals(s3));
System.out.println(s1==s3);
}
}
输出:
true
false
true
true
2.自定义的类
如果是你自己定义的一个类没有覆写euqals方法,那么用equals和==是一样的,都是比较句柄地址,因为自定义的类是继承于object,而object中的
equals就是用==来实现的。若要重新定义两个对象的比较,需要重写equals()方法
例2:使用默认的equals方法,比较两个内容相同的对象
public class EqualTest {
public static void main(String[] args){
A a=new A("first");
A b=new A("first");
System.out.println(a.equals(b));
System.out.println(a==b);
}
}
class A{
public String s;
public A(){}
public A(String s){
this.s=s;
}
}
输出:
false
false
例3:覆写equals方法,比较两个内容相同的对象
public class EqualTest {
public static void main(String[] args){
A a=new A("first");
A b=new A("first");
System.out.println(a.equals(b));
System.out.println(a==b);
}
}
class A{
public String s;
public A(){}
public A(String s){
this.s=s;
}
public boolean equals(A a){
if(this.s.equals(a.s))
return true;
else
return false;
}
}
输出:
true
false