String.equals源码详解

作为一名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源码详解)