==:
1.基本数据类型,比较值是否相等
2.对象:
比较两个对象的地址是否相等
equals:
equals比较的是类中的内容是否相等。由于所有的类都继承Object类,所以当该类中没有重写equals()方法时,继续调用的是父类中的equals()方法,这个方法比较的是两个类的地址是否相等
由于StringBuffer里面没有重写equals()方法,当比较两个StringBuffer对象的时候,会默认比较两个对象的地址,即便值相等,也会返回false.
正确的方法,转成String比较或者其他
String s1 ="abc";
String s2 = "abc";
String s3 = new String("abc");
System.out.println(s1==s2);//true
System.out.println(s1==s3);//false
System.out.println(s1.equals(s3));//true
原因:s1和s2指定同一块内存区域,"abc" , s3又重新开辟了一块地区。当时用==时候比较地址 ,当时用equals的时候比较内容
class Student{
int no;
String name;
Student(){
}
Student(int no,String name){
this.no = no;
this.name = name;
}
}
class Student1{
int no;
String name;
Student1(){
}
Student1(int no,String name){
this.no = no;
this.name = name;
}
public boolean equals(Student1 obj) {
return this.no == obj.no && this.name == obj.name;
}
public boolean equals1(Student1 obj){
return this.no == obj.no && this.name.equals(obj.name);
}
}
Student stu1 = new Student(1,"你好");
Student stu2 = new Student(1,"你好");
System.out.println(stu1 == stu2);//false
System.out.println(stu1.equals(stu2));//false
Student1 stu3 = new Student1(1,"你好") ;
Student1 stu4 = new Student1(1,"你好") ;
System.out.println(stu3.equals(stu4));//true
System.out.println(stu3.equals1(stu4));//true
原因:Student中使用equals方法,默认使用Object中的equals方法,比较的是两个对象的地址是否相等
Student1中自定义equals方法(可以重写父类equals方法),比较两个对象中的值是否相等