这个最主要还是重写,读代码完事儿!!
以下是我奉献的代码,仔细阅读就明白了
objectdemo类
package object_equals方法;
public class objectdemo {
public static void main(String[] args) {
student s1 =new student();
s1.setName("林青霞");
s1.setAge(30);
System.out.println(s1);
student s2 =new student();
s2.setName("林青霞");
s2.setAge(30);
System.out.println(s2);
//需求,比较两个对象内容是否相同
System.out.println(s1==s2); //这种方式比较的是s1与s2的地址值,又因为这俩s都是new出来的,所以地址值不相同
//返回值为false,,重写之后返回值为ture
System.out.println(s1.equals(s2)); //向上转型 父类引用子类对象
//返回值还是flase
//equal返回还是flase的原因,所以看到的还是地址的比较,像哟不这么去比较,就必须在类里面重写equals方法
//equals的底层源码
// public boolean equals(Object obj) {
//谁调用这个方法谁就this----s1
//obj 就是s2
// return (this == obj);
// }
}
}
student类
package object_equals方法;
import java.util.Objects;
public class student {
private String name;
private int age;
/**
* @param name
* @param age
*/
public student(String name, int age) {
this.name = name;
this.age = age;
}
/**
*
*/
public student() {
super();
}
/**
* @return name
*/
public String getName() {
return name;
}
/**
* @param name 要设置的 name
*/
public void setName(String name) {
this.name = name;
}
/**
* @return age
*/
public int getAge() {
return age;
}
/**
* @param age 要设置的 age
*/
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "student [name=" + name + ", age=" + age + "]";
}
@Override
public boolean equals(Object obj) {
//this----s1
//obj-----s2
if (this == obj) //判断s1与s2的地址值
return true;
if (obj == null)//判断s2的是否为空值
return false;
if (getClass() != obj.getClass())//判断s1与s2的字节码文件是否一致,也就是在不在一个类
return false;
student other = (student) obj;
return age == other.age && Objects.equals(name, other.name);
}
}