String類中的equals方法與Object類中的equals方法的不同點

qq_41300494發表於2020-10-01

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方法一樣,判斷是否是同一個物件。如果不是同一個物件,那麼再判斷長度是否相等,再判斷判斷每一個字元是否相等。

相關文章