Java培訓教程:”==“和 equals 方法究竟有什麼區別?
在學習 java技術過程中,我們會接觸到一些變數值的相關知識,本期小編為大家介紹的教程就是關於”==“和 equals 方法究竟有什麼區別?來看看下面的詳細介紹。
Java培訓教程:”==“和 equals 方法究竟有什麼區別?
==操作符專門用來比較兩個變數的值是否相等,也就是用於比較變數所對應的記憶體中所儲存的數值是否相同,要比較兩個基本型別的資料或兩個引用變數是否相等,只能用==操作符。
如果一個變數指向的資料是物件型別的,那麼,這時候涉及了兩塊記憶體,物件本身佔用一塊記憶體(堆記憶體),變數也佔用一塊記憶體,例如 Objet obj = new Object();變數 obj 是一個記憶體,newObject()是另一個記憶體,此時,變數 obj 所對應的記憶體中儲存的數值就是物件佔用的那塊記憶體的首地址。對於指向物件型別的變數,如果要比較兩個變數是否指向同一個物件,即要看這兩個變數所對應的記憶體中的數值是否相等,這時候就需要用==操作符進行比較。
equals 方法是用於比較兩個獨立物件的內容是否相同,就好比去比較兩個人的長相是否相同,它比較的兩個物件是獨立的。例如,對於下面的程式碼:
String a=new String("foo");
String b=new String("foo");
兩條 new 語句建立了兩個物件,然後用 a,b 這兩個變數分別指向了其中一個物件,這是兩個不同的物件,它們的首地址是不同的,即 a 和 b 中儲存的數值是不相同的,所以,表示式 a==b 將返回false,而這兩個物件中的內容是相同的,所以,表示式a.equals(b)將返回 true。
在實際開發中,我們經常要比較傳遞進行來的字串內容是否等,例如,String input =…;input.equals(“quit”),許多人稍不注意就使用==進行比較了,這是錯誤的,隨便從網上找幾個項
目實戰的教學視訊看看,裡面就有大量這樣的錯誤。記住,字串的比較基本上都是使用 equals 方法。
如果一個類沒有自己定義 equals 方法,那麼它將繼承 Object 類的 equals 方法,Object 類的 equals 方法的實現程式碼如下:
boolean equals(Object o){
return this==o;
}
這說明,如果一個類沒有自己定義 equals 方法,它預設的 equals方法(從 Object 類繼承的)就是使用==操作符,也是在比較兩個變數指向的物件是否是同一物件,這時候使用 equals 和使用==會得到同樣的結果,如果比較的是兩個獨立的物件則總返回 false。
如果你編寫的類希望能夠比較該類建立的兩個例項物件的內容是否相同,那麼你必須覆蓋 equals 方法,由你自己寫程式碼來決定在什麼情況即可認為兩個物件的內容是相同的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996644/viewspace-2795592/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java技術分享:”==“和 equals 方法究竟有什麼區別?Java
- Java中 equals() 方法和 == 的區別Java
- 深入探究Java中equals()和==的區別是什麼Java
- ==和equals方法的區別
- 【Java】equals 和 == 的區別Java
- java 中equals和==的區別Java
- 自學java和上java培訓班分別看什麼書?Java
- Java中equals與==的本質區別是什麼?Java
- java為什麼要重寫hashCode和equals方法Java
- Python和GO語言之間的區別是什麼?Python培訓PythonGo
- Java基礎- ==和equals和hashCode的區別Java
- Java基礎-- ==號與equals()方法的區別Java
- Components 與 Patterns 究竟有什麼區別
- Java培訓都學什麼Java
- Java培訓學些什麼?Java
- 好程式設計師Java培訓分享Java和HTML的區別?程式設計師JavaHTML
- java基本型別和包裝型別的“==”和equals()方法Java型別
- Python培訓分享:PyQT是什麼?PyQt4和PyQt5的區別是什麼?PythonQT
- Java培訓完能做什麼工作Java
- Java中(==)與equals的區別Java
- Java中equals和==比的是什麼Java
- JAVA中字串比較equals()和equalsIgnoreCase()的區別Java字串
- Java經典面試題: == 和 equals( )的區別Java面試題
- Java和Python是什麼?有什麼區別?JavaPython
- 軟體測試培訓教程:pytest與unittest區別
- 好程式設計師Java培訓分享int和Integer的區別程式設計師Java
- 好程式設計師Java培訓分享treeset和hashset的區別程式設計師Java
- 搞懂 Java equals 和 hashCode 方法Java
- 學習Python線上和線下培訓有什麼區別?哪種更合適?Python
- 參加Java培訓需要注意什麼Java
- 新手參加java培訓都學什麼Java
- Java培訓:什麼是Java?為什麼大家都學習Java技術?Java
- 長沙Java培訓:學不懂Java是為什麼?Java
- Java培訓分享:學習Java需要什麼軟體?Java
- Java常見知識點彙總(⑫)——==和equals的區別Java
- 【ASP.net】Equals 和 == 的區別ASP.NET
- hashCode()和equals()的區別?(skycto JEEditor)
- 深入理解equals和==的區別