zoukankan      html  css  js  c++  java
  • Java基础------equals方法

    记得之前学习java基础的那会儿觉得这个方法是真的神奇,字符串对象调用它就可以判断两个字符串的内容是否相同。而Object对象调用它判断的却是对象的内存地址是否相同。

    此后在做字符串内容是否相同的判断时,我总是会想到equals方法,直到最近我发现另一种语法貌似也可以达到相同的效果,StringUtils.pathEquals("qwe", ""),不过这个方法不是今天的主角,它让我忽然想起我一直没有好好去了解一下String类下的equals方法是如何实现的?首先,先来看一下Object类中的equals方法:

    public boolean equals(Object obj) {
            return (this == obj);
        }

    实际上只有一行代码,就是判断一下两个Object对象的内存地址是否相同,也就是说这两个对象是否为同一个。

    调用这个方法的话,即便是两个对象的内容完全相同,在内存地址不同的情况下,依然会返回null。

    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;
        }

    这个方法是String类重写后的equals方法,首先还是判断了内存地址是否相同,如果内存地址相同的话说明二者是同一个对象,那么内容自然也是相同的,直接返回true即可。

    然后判断传入的对象是否为String类的实例,如果不是则直接判定为false。

    然后将传入对象转为String,获取到二者的value,这东西实际上是一个字符数组,也就是String的本体所在,首先对比长度,长度如果不一致,则内容一定不一致,长度一致则将字符数组中的元素取出一一对比,如果皆一致则判定为内容一致。

    这小小的一个方法封装的很细致,也很严谨,值得学习。

  • 相关阅读:
    【转】mapgis的一些实用方法和处理技巧
    mac osx 升级到10.10 软件无法打开的问题
    Oracle临时表
    增加表空间大小的三种办法
    哪些情况会记录Oracle Alert日志
    每日PDCA实践
    graphite积累(二)
    Graphite在centeros 6下安装
    linux screen命令
    linux环境中执行Mysql脚本
  • 原文地址:https://www.cnblogs.com/wxdmw/p/13724548.html
Copyright © 2011-2022 走看看