关于IDEA给的实例对象比较equals()方法重写代码解释和getClass()的理解

it2023-10-11  67

1.IDEA快捷键生成equals()方法及解释

代码如下(示例):

class MyTime01 { int year; int month; int day ; public boolean equals(Object o) { if (this == o) return true;//完全相等 即引用指向的地址都相同 //其对象是否为空,即两个对象是否是同一个类 if (o == null || getClass() != o.getClass()) return false; //无对象.getClass() 默认为 this.getClass() //使用getClass()输出调用该方法的对象类型的什么类。 //例如: Animal 类型的引用 a // a.getClaee() == Animal.class; // 调用a.getClass() == 地址.....Animal //字节码文件地址 //System.out.println(Test02.class);//class com.yiming.java1020.objecttest.Test02 MyTime01 myTime01 = (MyTime01) o;//向下转型,获取子类特有变量值 //判断两个对象的属性值是否相同 return year == myTime01.year && month == myTime01.month && day == myTime01.day; } }

上述总结

使用getClass()输出调用该方法的对象类型的什么类。 例如: Animal 类型的引用 a a.getClaee() == Animal.class; 调用a.getClass() == 地址…Animal //字节码文件地址 System.out.println(Test02.class); //classcom.yiming.java1020.objecttest.Test02 //当前Test02.class字节码文件在文件中的地址

缺点:

不能解决引用类型值套引用类型值的判断: Student s1 = new Student(1,“w”); Student s2 = new Student(1,new String(“w”)); System.out.println(s1.equals(s2)); //当前结果输出为:false 解释:

class Student { //学号 int no ; //所在学校 String school; public Student(){} public Student(int no , String school){ this.no = no ; this.school = school ; } public boolean equals(Object o){ if(this == o ){ return true; } if(o == null || getClass() != o.getClass() ){ return false; } Student s = (Student)o; //关键。。。。。。。。。。。。。。。。。。。。。。。。。。 //return s.no == this.no && this.school.equals(s.school); return s.no == this.no && s.school == this.school; } } public class Test03 { public static void main(String[] args){ Student s1 = new Student(1,"w"); Student s2 = new Student(1,new String("w")); System.out.println(s1.equals(s2)); //当前结果输出为:false } }

将在下一篇说明…

最新回复(0)