码迷,mamicode.com
首页 > 编程语言 > 详细

深度解析java.lang.String类的equal(Object obj)方法

时间:2018-08-18 16:29:06      阅读:366      评论:0      收藏:0      [点我收藏+]

标签:静态   pareto   ret   equal   value   不一致   比较   return   method   

背景:最近在研究静态扫描的东西,遇到一个规则:"equals(Object obj)" should be overridden along with the "compareTo(T obj)" method

         然后就想深度扒一扒equals和compareTo有什么区别

首先先来看下java.lang.String这个类下面的equals方法是如何实现的。

public boolean equals(Object anObject) {
        if (this == anObject) {  //判断对象的地址是否一致
            return true;  
        }
        if (anObject instanceof String) {  //判断anObject是否是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.对象的地址是一致的返回true

2.对象地址不一致但是类型一致,字符数组的长度一致且每个字符都相等,则返回true

3.如果参数不是String类型则返回false

4.如果参数是String类型但是字符数组的长度不一致则返回false

5.如果参数是String类型,字符数组的长度一致,但是从左到右如果遇到字符不一致则返回false

 

深度解析java.lang.String类的equal(Object obj)方法

标签:静态   pareto   ret   equal   value   不一致   比较   return   method   

原文地址:https://www.cnblogs.com/zhaijing/p/9497396.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!