• 注意重写类的equals()方法


    注意在java中在比较引用类型时==和原生的equals()方法比较的都是看它们否是同一个对象(说的更直白一点就是他们在内存的位置是否是一样的),但我们在真实世界中关注的往往只是其中的某个属性是否相等,如果某个属性相等我们就认为他们是相等的,所以我们需要在自己定义的类中重写equals()方法。

    当然基本类型用==比较是否相等还是不会存在甚麽问题了

    注意:在String和Intrger中都已经重写过了,所以可以直接用equals()进行比较

    public class Citizen {//公民类
        private String id;
        public Citizen(String theId){
            id=theId;
        }
        
        /*
         * 覆盖父类(Object)的equals()方法
         * 因为在真实世界中我们只是关心“公民”是不是相同,而不关心他们在内存中存放的位置是不是一样
         */
        
        public boolean equals(Object obj){
            
        if(obj==null){
            return false;
        }
        if(obj==this){//如果是同一个对象id一定相同
            return true;
        }
        if(this.getClass()!=obj.getClass()){//判断所处的类是不是相同,总不能拿人和小猫看是不是同一个吧
            return false;
        }
        Citizen c = (Citizen) obj;//将对象转化为Citizen的类型
        
        return c.id==this.id;//返回她们的id是否相同
            
            
            
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Citizen p1 = new Citizen("id00001");
            Citizen p2 = new Citizen("id00001");
            System.out.println("p1==p2: "+(p1==p2));
            //如果不重写equals()方法返回的是false
            System.out.println("p1.equals(p2): "+(p1.equals(p2)));
    //-------------------------------------------------------------------------------------------------------        
            Integer t1 = new Integer(227);
            Integer t2 = new Integer(227);
            System.out.println(t1.equals(t2));//比较值
            System.out.println(t1==t2);//比较对象
            //特殊情况:在java中为了节省创建对象的时间,对于一些常用的对象会在内存中缓存下来。
            //当int、short类型在-128~127或者在u0000~u007f的char类型的值的时候,产生的对象会会缓存在内存中,
            //当试图通过自动装箱产生一个相等值的Integer的值时,系统不会生成新的对象,而是直接使用内存中已经存在的对象
            t1=127;
            t2=127;
            System.out.println(t1==t2);//比较对象
            
            
        }
    
    }
     
    不一样的烟火
  • 相关阅读:
    vue ssr
    webpack-dev-server proxy代理
    PHP连数据库生成数据字典
    redis.rpm 安装
    centos 6.5安装NodeJS
    Jenkins + git + maven 安装
    最新版本GIT安装
    身份证校验
    快递100物流公司列表
    redis 安装
  • 原文地址:https://www.cnblogs.com/cstdio1/p/11508653.html
Copyright © 2020-2023  润新知