package com.javase.进阶.equals;
/*** equals()方法* - equals()方法是老祖宗Object类中的方法,是用来判断两个引用数据类型对象是否相等。* - 以后所有自定义类的equals()方法都需要重写,因为Object类中的equals()方法比较的是两个对象的内存地址,* 而我们应该比较的是两个对象的内容,所以需要重写equals()方法。** - 重写规则:自己定,主要看是什么和什么相等时表示两个对象相等。** - String类是SUN编写的,所以String类的equals()方法肯定也重写了。* 以后判断两个字符串是否相等,最好不要使用"==",而是要调用字符串对象的equals()方法。* 如果是直接赋值的,比如: * String s1 = "abc";* String s2 = "abc";* 此时判断s1与s2是否相等可以使用"==";* System.out.println(s1 == s2); //该行代码输出结果是true* 如果字符串对象是"new"出来的,比如:* String s3 = new String("abc");* 这时你再判断s1与s3是否相等* System.out.println(s1 == s3); //该行代码输出结果是false* * 所以为了确保安全准确,今后比较字符串是否相等的时候统一使用equals()方法* * - 注意:重写equals()方法的时候要彻底。(也就是说所有你自定义的类都有需要根据需要重写equals()方法)** 结论:在重写equals()方法的时候或编程的时候记住以下规矩:* java中基本数据类型比较是否相等使用"=="* java中所有的引用数据类型判断是否相等统一使用"equals()"*/
public class Student {
// 学号private int no;
// 所在学校private String school;
// 无参构造方法public Student() {}// 有参构造方法public Student(int no, String school) {this.no = no;this.school = school;}// set and get 方法public int getNo() {return no;}public void setNo(int no) {this.no = no;}public String getSchool() {return school;}public void setSchool(String school) {this.school = school;}// 重写toString()方法@Overridepublic String toString() {return "学号:" + no + ",所在学校:" + school;}// 重写equals()方法public boolean equals(Object o){//"o == null"表示引用"o"是空;"!(o instanceof Student)"表示引用o不是Student类型,这两种情况肯定不相等,所以返回falseif (o == null || !(o instanceof Student)) {return false;}//"this == o"表示两个对象的内存地址相等,既然内存地址相等,表示是同一个对象,一定相等,所以返回trueif (this == o){return true;}//程序执行到此表示引用"o"一定是Student类型,所以可以直接向下转型。//注意:这里的引用"o"必须要向下转型,因为是调用子类特有的属性,父类没有这个属性不能直接用引用"o"去调用// 也就是说:不能直接"no == o.no"也不能直接"school.equals(o.school)"Student s = (Student)o;//以下代码比较基本数据类型使用"==",比较引用数据类型使用"equals()"//no是基本数据类型,比较时使用"==";school是"String"类型,它属于引用数据类型,比较时使用equals()方法//"no == s.no && school.equals(s.school)"的运行结果一定是boolean类型其结果只有两种分别是:true或falsereturn no == s.no && school.equals(s.school);}
}
class StudentText{public static void main(String[] args) {Student s1 = new Student(11111,"抚宁一中");Student s2 = new Student(11111,"抚宁一中");System.out.println(s1 == s2);//false "=="比较的是内存地址System.out.println(s1.equals(s2));//true equals()比较的是内容}
}
上一篇:《人民的名义》:身为反派,最不可能的罪犯竟是他 人民的名义中的坏人的下场 人民的名义谁是最大的反派
下一篇:山东vs横滨争议判罚汇总:对手禁区手球未被吹;山东连吃黄牌 泰山队vs日本横滨手球 山东对横滨亚冠第一轮比赛结果