• equals()方法


    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()方法
    
        @Override
        public String toString() {
            return "学号:" + no + ",所在学校:" + school;
        }
    
    //    重写equals()方法
        public boolean equals(Object o){
            //"o == null"表示引用"o"是空;"!(o instanceof Student)"表示引用o不是Student类型,这两种情况肯定不相等,所以返回false
            if (o == null || !(o instanceof Student)) {
                return false;
            }
            //"this == o"表示两个对象的内存地址相等,既然内存地址相等,表示是同一个对象,一定相等,所以返回true
            if (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或false
            return 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()比较的是内容
        }
    }
    
  • 相关阅读:
    66-86-javajvm-堆
    哈希表的介绍和内存布局 [数据结构][Java]
    Python+Selenium做到浏览器所见即所得(全网最简单教程)
    3.tomcat多实例和索引页
    原码,反码,补码 以及 位运算
    【C++ Primer Plus】第2章 开始学习C++
    电脑重装系统打印机脱机状态怎么恢复正常
    如何把“中式发音”调整到机器偏爱的口音?Elena老师带你详解突破点!
    《机器人SLAM导航核心技术与实战》第1季:第0章_SLAM发展综述
    python读取pdf表格并合并为excel
  • 原文地址:https://blog.csdn.net/heliuerya/article/details/128141649