美文网首页
String.equals源码详解

String.equals源码详解

作者: small瓜瓜 | 来源:发表于2019-07-05 12:28 被阅读0次

    作为一名java程序员,在学习java基本功时,应该都遇到过这样一个事情,就是字符串的比较。很多人刚开始的时候总是习惯性的使用==符号来判断,但是这是不对的,因为==比较的是对象的内存地址。推荐做法是用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;
        }
    
    代码量是很少的,那我们来看看它具体做了什么。
    1. 首先通过if (this == anObject)判断是不是两个对象内存地址是不是一样,一样说明是同一个对象。
      到这里可以知道单用判断是不准确的,但是有些时候也是可以判断的。
      具体什么时候可以判断,可以参考下面这篇博客:java String创建字符串对象
    2. 然后就是if (anObject instanceof String)判断anObject是不是String类型。如果是则再进行判断,不是直接返回false
    3. 如果是,则首先将anObject转为String类型。然后先比较Stringvalue字段的长度是否一样。
    4. 如果长度一样则通过while循环判断两个String对象的value数组中的每一个字符是不是相同的

    最后啰嗦一句,一定要养成看源代码的习惯。看好代码,学好程序,过好人生

    相关文章

      网友评论

          本文标题:String.equals源码详解

          本文链接:https://www.haomeiwen.com/subject/uhmshctx.html