在java继承中的一个经典的应用就是:equals方法:
---equals与==的差别:
==做关系运算符时:
(1)这个运算符的两边.如果是基本数据类型.判断的是基本数据类型的值是否相等
(2)如果是某个类型的对象,判断的是对象是否同一地址
如果地址相同,内容一定相同
如果地址不同,不一定内容不同
equals方法不能判断基本数据类型的数据,只能判断对象是否相等
如果没有重写equals,那么equals方法判断的是地址,因为这个equals方法继承自Object的equals方法,Object类中的equals判断的是地址,如果子类重写了方法,就看具体重写的方法;
在java 的类库中String ,封装(double .integer,float ),判断instanceof 左边的对象是否与右边的对象同一类型
Student.java
public class Student {
private int age;
public Student(int age, String name, String stuNo) {
super();
this.age = age;
this.name = name;
this.stuNo = stuNo;
}
public int getAge() {
return age;
}
@Override
public boolean equals(Object obj) {
boolean flag=false;
if(objnull){
return flag;
}else if(thisobj){
return true;
}else{
//obj不空,且this跟obj地址不相同
//obj对象是否是Student类类型的对象
if(obj instanceof Student){
Student stu=(Student)obj;
if(this.name.equals(stu.getName())&&this.age==stu.getAge()&&this.stuNo.equals(stu.getStuNo())){
return true;
}
}
}
return flag;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getStuNo() {
return stuNo;
}
public void setStuNo(String stuNo) {
this.stuNo = stuNo;
}
private String name;
private String stuNo;
}
Demo1.java
public class Demo1 {
public static void main(String[] args) {
int i=3;
int j=3;
System.out.println(i==j);
Student stu1=new Student(20,"zhansan","s001");
Student stu2=new Student(20,"zhansan","s001");
Student stu3=new Student(20,"zhansan","s001");
System.out.println(stu1==stu2);
System.out.println(stu1==stu3);
if(stu1.equals(stu2)){
//Object equals 判断的是地址
System.out.println("=");
}else{
System.out.println("!=");
}
if(stu1.equals(stu2)){
//Object equals 判断的是地址
System.out.println("=");
}else{
System.out.println("!=");
}
}
}