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比较的是对象中的内容

  • 相关阅读:
    计算机组成原理_存储器
    常用CMD命令
    swiper及其父级隐藏之后轮播失效问题
    canvas生成海报
    移动端h5 实现多个音频播放
    vuex的一些学习
    关于H5的一些杂思细想(一)
    vue Error: No PostCSS Config found in
    vue路由传参的三种方式区别(params,query)
    vue-cli+mock.js+axios模拟前后台数据交互
  • 原文地址:https://www.cnblogs.com/java-spring/p/10435139.html
Copyright © 2011-2022 走看看