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

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

  • 相关阅读:
    安装Eclipse for MAC 苹果版
    visual studio code emmet 插件不提示?解决方案
    支付宝付款页面调整屏幕亮度
    浅谈iOS需要掌握的技术点
    Objective-C 编程艺术 (Zen and the Art of the Objective-C Craftsmanship 中文翻译)
    ios开发数据库版本迁移手动更新迭代和自动更新迭代艺术(-)
    ios 添加到cell 上的button点击无效!扩大button的点击区域(黑魔法)
    个人中心模块-拍照剪裁上传
    利用js与java交互
    显示gif动画(帧动画的播放)
  • 原文地址:https://www.cnblogs.com/wxdmw/p/13724548.html
Copyright © 2011-2022 走看看