說說Java裡的equals(上)
在Java字串那些事兒一文發表後,朋友給我留言說:比較字串用equals不就完了唄,幹嘛要用"==",吃飽了撐的,能不能來點實際的。其實在文章裡我是想表明, Java字串兩種宣告方式在堆記憶體中不同的體現,我們在寫程式碼過程中,為了避免重複的建立物件,儘量使用String s1 ="123" 而不是String s1 = new String("123"),因為JVM對前者給做了優化。
那麼,我們今天來說說equels,話不多說,上程式碼:
執行一下,結果如下:
面試題中老問"=="與和equals有什麼區別,甚至連百度搜尋equals也會自動關聯出equals和"=="的區別這一類的問題來。
筆者一直認為,這兩者之間沒有必然的聯絡,在引用型別中,"=="是比較兩個引用是否指向堆記憶體裡的同一個地址(同一個物件),而 equals是一個普通的方法,該方法返回的結果依賴於自身的實現。//java學習交流:737251827 進入可領取學習資源及對十年開發經驗大佬提問,免費解答!我們先看一下Person這個類,並沒有equals方法呀,那為什麼不報錯呢?在Java中,如果一個類沒有繼承其它類,那麼它預設繼承Object這個類,開啟Object這個類看一下,發現如下程式碼,Person這個類的equals方法就繼承自這裡
很簡單,就一句程式碼,判斷兩個引用是否指向同一個物件,兩個Person物件在堆記憶體中的表現如下圖所示:
所以程式碼person1.equals(person2)等同於person1 == person2,當然列印出來的結果是false。我們再來看看Integer這個類, equals的實現如下:
當程式碼執行到System.out.println(itr.equals(lon))時,會判斷傳入的lon這個物件是否是Integer型別,這裡的lon是Long型別,所以列印出來的結果當然是false了。
最後是我們String的實現
當程式碼執行到:System.out.println(s3.equals(s4)),由於字串底層char陣列裡存的都是{'1','0','0'}當然列印出來是true了。
《為什麼阿里巴巴開發手冊強制不要在 foreach 裡執行刪除操作》
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010294/viewspace-2849251/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 說說java的反射Java反射
- 說說Codewars 裡面的Multi Line Task
- 說說Java非同步呼叫的幾種方式Java非同步
- 面試官:說說Java物件的組成面試Java物件
- 你說說對Java中SPI的理解吧Java
- 先簡單說一說Java中的CopyOnWriteArrayListJava
- 面試官:說說Java 原子類面試Java
- 【Java面試】說說你對Spring MVC的理解Java面試SpringMVC
- 帶你走進《天穗之咲稻姬》裡說了與沒說的種田“祕聞”(上)
- 面試官:說說Java物件的四種引用方式面試Java物件
- 好好說說Java中的常量池之Class常量池Java
- 說說Java執行緒間通訊Java執行緒
- java equalsJava
- 說說 Python 的列表Python
- 簡單說說Java 定時任務框架---QuartzJava框架quartz
- java String類說明Java
- 從技術上來說PHP好還是JAVA好?PHPJava
- 聽說這四個概念,很多 Java 老手都說不清Java
- 【Java】equals 和 == 的區別Java
- 說說你對this的理解
- 說說Flutter中的RepaintBoundaryFlutterAI
- 說說Flutter中的SemanticsFlutter
- 說說 Python 的 if 語句Python
- 說說劫持 Cookie 的原理Cookie
- 說說React元件的StateReact元件
- 不可不說的Java“鎖”事Java
- 金庸武俠小說經典語錄大全 金庸小說裡的名言精選
- 美團一面:說一說Java中的四種引用型別?Java型別
- java 類路徑說明Java
- 說說 auto
- 說說你對JSBridge的理解JS
- 說說你對UML的理解
- 說說JavaScript中的事件模型JavaScript事件模型
- 說說我對 WSGI 的理解
- 傳說中的資料結構_JAVA資料結構Java
- 轉:不可不說的Java“鎖”事Java
- java 中equals和==的區別Java
- Java中(==)與equals的區別Java