zoukankan      html  css  js  c++  java
  • 对java中equals方法的简单理解

    先附上equals的源码:

        public boolean equals(Object obj) {   
            return (this == obj);   //判断本类中的对象和传过来的obj对象比较是否相等。比较的是地址,返回的是一个布尔类型
        }

    源码简洁明了,equals是Object类中的一个方法,很多时候我们都会用到

    一、在Object中equals的作用是一个判断是否相等,而比较的规则是比较两个对象的地址,如果地址相等返回ture,否则返回false

    eg:

    public class equalstest {
        public static void main(String[] args) {
            Dog dd = new Dog();    
            Dog dd2 = new Dog();
            
            dd.equals(dd2);  //dd和dd2两个引用对象存储在栈内存中,保存的数据是两个不同的对象在堆内存中地址,显然两个不同的对象在堆内存中存储的地址不一样,所有返回false
            dd.equals(dd);   //同理,dd和dd比较返回的是ture,因为本来就是一个对象     
        }
    }

    我们可以得出equals比较的内容具体是:引用在栈内存中保存的地址。即dd和dd2在栈内存中保存的数据

    二、因为所有创建的类都默认继承了Object,所以我们可以直接使用它,但是很多时候我们的需求并不是比较地址,这个时候就需要对equals进行重写

    在很多java提供的类中,都重写equals来满足自己的需求,比如说String

    附上String中equals的源码:

        public boolean equals(Object anObject) {
            if (this == anObject) {
                return true;
            }
            if (anObject instanceof String) {
                String anotherString = (String) anObject;
                int n = value.length;
                if (n == anotherString.value.length) {
                    char v1[] = value;
                    char v2[] = anotherString.value;
                    int i = 0;
                    while (n-- != 0) {
                        if (v1[i] != v2[i])
                                return false;
                        i++;
                    }
                    return true;
                }
            }
            return false;
        }

    从源码中看出比较的内容是:字符串的内容是否相等

    eg:

    public class equalstest {
        public static void main(String[] args) {    
            String aa = "abc";
            String bb ="abc";
            String cc ="def";
            
            System.out.println( aa.equals(bb) );  //返回的是ture
            System.out.println( cc.equals(bb) );  //返回的是false      
        }
    }

    三、因此当我们需要用equals进行比较的时候,我们也可以进行重写,比较规则由我们自己来订

    在myeclipse中,也可以直接右键source,生成equals方法。但是和没生成一个效果(不知道是否是我理解的太片面),只是方便我们进行重写,不重写也是按照继承过来的equals的规则进行比较。

    如图

  • 相关阅读:
    Caused by: org.xml.sax.SAXParseException: The content of elements must consist of well-formed charac
    java反射方法
    错误解决:There is no getter for property named 'id' in class 'java.lang.String'
    java的AOP
    Java预置的注解
    mysql 数据库自动备份
    微信小程序
    关于 IOC和spring基本配置详解
    关于Spring配置的一些东西
    关于Spring的一点东西
  • 原文地址:https://www.cnblogs.com/txbblog/p/10365798.html
Copyright © 2011-2022 走看看