==号和equals方法的区别: ==是一个比较运算符号,既可以比较基本数据类型,也可以比较引用数据类型,基本数据类型比较的是值,引用数据类型比较的是地址值。equals方法是一个方法,只能比较引用数据类型,所有的对象都会继承Object类中的方法,如果没有重写Object类中的equals方法,equals方法和==号比较引用数据类型无区别,重写后的equals方法比较的是对象中的属性。
这里着重说下equals在重写前后重写后的不同
下面举例说明一下equals在重写和重写后的区别
重写前:
package cn.com.hwadee;
public class equal {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s=new Student();
s.setAge(18);
s.setName("李四");
Student s1=new Student();
s1.setAge(18);
s1.setName("李四");
boolean a=s.equals(s1);
System.out.println(a);
}
}
class Student{
String name;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
运行结果:
重写后:
package cn.com.huadee;
public class equal {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student s=new Student();
s.setAge(18);
s.setName("李四");
Student s1=new Student();
s1.setAge(18);
s1.setName("李四");
boolean a=s.equals(s1);
System.out.println("s和s1比较结果为:"+a);
}
}
class Student{
String name;
int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//equals重写
***@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}***
}
运行结果:
说的简单点就是equals在重写前,所比较的是内存地址,不同对象的地址不同,也就导致了比较结果为false.而在重写后,equals比较的是对象的属性(也就是对象的值),故结果显示为true