equals是用來判斷內容是否相等的。它是object的方法。object是所有類的直接或間接父類。
直接使用equals來判斷兩個引用型別是否相等,其實是判斷兩個引用型別的位址是否一樣。
string str=new string("asd");
string str1=new string("asd");
system.out.println(str.equals(str1));//true
我們知道上述**執行的結果為true。既然string也是引用型別,那麼用equals來判斷兩個字串的內容是否相等為什麼可以呢?
因為在string類中重寫了equals方法,重寫之後比較的就不再是兩者的位址了。我們來看一下原始碼:
public boolean equals(object anobject)
if (anobject instanceof string)
}return false;
}
看不懂沒關係,我們只要記住在string中進行字串內容的比較是依賴於string中對equals的重寫就可以了。
在使用equals進行兩個物件的比較時,也是比較的兩個物件的位址是否一樣。
person person = new person("張三",18);
person person2 = new person("張三",18);
system.out.println(person.equals(person2));//false`
上述**的結果為false.就是因為上述兩個變數比較的是位址。
如果想自定義兩個物件的屬性完全相同就認為這兩個物件相同,就必須重寫equals方法。比如 以下對equals的重寫。
@override
public boolean equals(object o)
這時再用
person p = new person("張三",18);
person p2 = new person("張三",18);
system.out.println(p.equals(p2));//true
結果就是true了。這個時候就把物件裡面的年齡和姓名進行比較,如果都相同,則認為這兩個物件相等。
其實這種比較使用工具類objects更好,因為如果p2=null,p=null。執行時會發生空指標異常。
但是用objects的equals(object a, object b)方法就可以正常執行因為它的equals原始碼為:
public static boolean equals(object a, object b)
也就是當兩個物件都為空時,認為兩個物件的位址是一樣的,a==b就成立了,也符合兩個物件為空內容相等的認知。
如果兩個物件的位址不一致,則會判斷a.equals(b)。需要注意的是:此時的出現了多型的知識,object a=p,object b=p2.根據編譯看左邊執行看右邊的原則,equals是p重寫後的方法,所以是比較的兩個物件裡面的內容。而如果p沒有重寫equals方法,則用的是object裡面的equals方法,那麼比較的還是兩個物件的位址,此時結果還是為false。因此,使用objects工具類的前提就是重寫object的equals方法。
Vue 使用filters進行內容轉換
直接上圖 發放人員 下的資料為 id,我想將其轉換為 name。這時就用到了 vue 的filters。首先寫乙個getmembers 方法,用來得到員工表的所有資料。將得到的資料存到localstorage裡 localstorage.setitem members json.stringify ...
String使用equals和 比較的區別
操作符的作用 1 用於基本資料型別的比較 2 判斷引用是否指向堆記憶體的同一塊位址。equals的作用 用於判斷兩個變數是否是對同乙個物件的引用,即堆中的內容是否相同,返回值為布林型別 在class檔案中有一部分 來儲存編譯期間生成的 字面常量以及符號引用,這部分叫做class檔案常量池,在執行期間...
和equals的比較
基本的資料型別都放在stack 棧 中 引用型別變數放在stack 棧 中,真正的內容放在heap 堆 中。堆 首先堆是動態分配的,jvm並不會自動釋放這部分記憶體。只用等待系統的gc來進行記憶體 棧 是在類載入中有系統靜態分配的,而且分配時按照記憶體的高低位址分配。這部分記憶體系統會自動進行釋放。...