Groovy In Action 筆記 (2)
阿新 • • 發佈:2020-10-07
聊聊Groovy中的 '==' 與 'equals'
先看看Java中它們的區別:
- '=='
- 對於值型別,則比較值
- 對於引用型別,則比較兩個變數是否指向的為相同記憶體地址
- 'equals'
- 如果類沒有override此方法,則比較兩個變數是否指向的為相同記憶體地址
- 如果有override此方法,則使用子類實現的邏輯進行比較,如String類。
- 如下程式碼
-
/* * This Java source file was generated by the Gradle 'init' task. */ package practices; public class App {
-
再看看Groovy中的表現:
- =='
- 對於值型別,則比較值
- 對於引用型別,則比較兩個變數是否指向的為相同記憶體地址 -- 注意String 型別有例外,String類override了==操作符,實現了內容比較
- 'equals'
- 如果類沒有override此方法,則比較兩個變數是否指向的為相同記憶體地址
- 如果有override此方法,則使用子類實現的邏輯進行比較,如String類。
- 如下程式碼
-
def str1 = "hello" def str2 = "hello" def str3 = new String("hello") println(str1
-
ps:
Groovy與Java中instanceof 操作為true的前提:兩個類由相同的classloader載入。如果使用不同的載入器,即使載入相同的程式碼檔案,對兩個類的例項使用 instanceof,結果均為false.