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的本体所在,首先对比长度,长度如果不一致,则内容一定不一致,长度一致则将字符数组中的元素取出一一对比,如果皆一致则判定为内容一致。

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

  • 相关阅读:
    google 以图搜图
    一个idear
    负责
    腾讯笔试
    迅雷笔试题
    如何删除表中重复的字段
    sed的使用
    C++ Html解析器HtmlCxx用户手册和源代码解析
    makefile从无到有
    深入理解函数指针
  • 原文地址:https://www.cnblogs.com/wxdmw/p/13724548.html
Copyright © 2011-2022 走看看