String类中的equals方法与Object类中的equals方法的不同点

1.首先我们看看Object类中的equals方法

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

我们可以看出Object类中判断的是否是同一个对象,我们接下来来看看下面这个例子

Employee emp1 = new Employee("张三", 5000, 2005, 5 ,5);
Employee emp2 = new Employee("张三", 5000, 2005, 5 ,5);
System.out.println(emp2.equals(emp1));

这里停下来思考一下会输出什么呢?

这里我相信很多像我一样的初学者认为会输出true。但是答案却是false,为什么呢?我们在看看方法体里唯一的一句代码

        return (this == obj);

this==obj具体的是代表什么呢?其实这里是判断this跟obj的地址是否相等,也就是判断在堆里是否是同一个对象。
在这里插入图片描述

其实很容易就能看出栈里了emp1和emp2里存放的地址并不是一样的,所以自然输出false。

2.接着我们看看String类中的equals方法

public boolean equals(Object anObject) {
		//判断是否同一个对象
        if (this == anObject) {
            return true;
        }
        //判断anObject 是否是String的实例对象
        	//如果是的话判断两个String对象的长度是否相等
        			//如果相等再判断每一个字符是否相等
        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方法主要做的是两个东西,第一个跟Object里的equals方法一样,判断是否是同一个对象。如果不是同一个对象,那么再判断长度是否相等,再判断判断每一个字符是否相等。

©️2020 CSDN 皮肤主题: 1024 设计师:上身试试 返回首页