zoukankan      html  css  js  c++  java
  • equals方法和==的区别--用实例简单说明

    首先我们创建一个类

    public class People {
    
        private String name;
        private String address;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        public People() {
            super();
        }
    
        public People(String name, String address) {
            super();
            this.name = name;
            this.address = address;
        }
    
        @Override
        public String toString() {
            return "People [name=" + name + ", address=" + address + "]";
        }
    }

    该类没有重写hashcode和equals方法

    下面我们进行比较

    public static void main(String[] args) {
    
            People p1 = new People("a", "A");
            People p2 = new People("a", "A");
            People p3 = new People("b", "B");
            System.err.println(p1);
            System.err.println(p2);
            System.err.println(p3);
            System.err.println(p1.equals(p2));
            System.err.println(p1 == p2);
            System.err.println(p1.equals(p3));
            System.err.println(p1 == p3);
    
        }

    结果为:

    说明如果没有重写equals()方法,则equals和==比较的都是地址。每生成一个对象,虚拟机都会重新生成一个地址,因此比较结果都为false

    我们加上hashcode和equals方法

    public class People {
    
        private String name;
        private String address;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        public People() {
            super();
        }
    
        public People(String name, String address) {
            super();
            this.name = name;
            this.address = address;
        }
    
        @Override
        public String toString() {
            return "People [name=" + name + ", address=" + address + "]";
        }
    
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((address == null) ? 0 : address.hashCode());
            result = prime * result + ((name == null) ? 0 : name.hashCode());
            return result;
        }
    
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            People other = (People) obj;
            if (address == null) {
                if (other.address != null)
                    return false;
            } else if (!address.equals(other.address))
                return false;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }
    
    }

    再次运行实例,结果为:

    说明如果重写equals()方法,则==比较的是地址,equals比较的是对象中的内容

  • 相关阅读:
    SpringBoot RequestBody ajax提交对象
    微信小程序常用样式汇总
    微信小程序常用控件汇总
    java多线程实现多客户端socket通信
    客户端连接Codis集群
    crontab 解析
    在 RHEL/CentOS 7 上配置NTP时间服务器
    tomcat的bin目录中startup.bat/tomcat.6.exe/tomcat6w.exe区别
    Windows 下tomcat安装及将多个tomcat注册为Windows服务
    Oracle 数据库排错之 ORA-00600
  • 原文地址:https://www.cnblogs.com/java-spring/p/10435139.html
Copyright © 2011-2022 走看看