你应该学会的Java源码学习

你应该学会的Java源码学习

深圳达内教育      2022-03-07 02:20:01     26

你应该学会的Java源码学习,equals源码分析     public boolean equals(Object obj) {        return (this == obj);    }上面简单

课程价格 请咨询

上课时段: 授课校区:

详细介绍

equals源码分析    

     public boolean equals(Object obj) {        return (this == obj);    }

上面简单的三行代码就是Object类中equals的源码。主要的比较是两个对象的地址。可以看到,方法体中equals比较其实也是“==”实现的。因此,下次在面试的过程中,你遇见问equals与“==”的区别的时候,你先给出结论。==是比较两个对象地址的,没有重写equals方法的实体类使用equals也是比较地址的。

那么我们经常用String中equals为什么是比较值的呢?接下来我们看一下String类中equals的源码

String中equals方法源码分析

   

    public boolean equals(Object anObject) {      //可以看到,String中重新的equals方法在第一步就进行了地址比较,      //如果两个字符串的地址相等,那么他们的值一定相等,就不用去进行下面的值比较了        if (this == anObject) {            return true;        }      //这个if表示,如果equals的方法体中不是一个String类型,那么也就直接返回为false      //比如“蜜蜂攻城狮        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;    }

在我们实际编写代码的时候,特别是一些需要重写equals方法的实体类的时候,那么我们需要进行equals的方法重写,重写equals方法需要遵守如下约定。翻译如下

(1)自反性:x.equals(x)必须返回true。

(2)对称性:x.equals(y)与y.equals(x)的返回值必须相等。

(3)传递性:x.equals(y)为true,y.equals(z)也为true,那么x.equals(z)必须为true。

(4)一致性:如果对象x和y在equals()中使用的信息都没有改变,那么x.equals(y)值始终不变。

(5)非null:x不是null,y为null,则x.equals(y)必须为false。

以上就是深圳达内教育java培训机构的小编针对“你应该学会的Java源码学习”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。

培训啦提醒您:交易时请核实对方资质,对于过大宣传或承诺需谨慎!任何要求预付定金、汇款等方式均存在风险,谨防上当。