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
}
}