java 中“==”與“equal” 的區別

http://blog.csdn.net/qq_33406883/article/details/52180154

一、java當中的數據類型和“==”的含義:

基本數據類型(也稱原始數據類型) :byte,short,char,int,long,float,double,boolean。他們之間的比較,應用雙等號(==),比較的是他們的值。複合數據類型(類):當他們用(==)進行比較的時候,比較的是他們在內存中的存放地址(確切的說,是堆內存地址)。注:對於第二種類型,除非是同一個new出來的對象,他們的比較後的結果爲true,否則比較後結果爲false。因爲每new一次,都會重新開闢堆內存空間。

二、equals()方法介紹:

JAVA當中所有的類都是繼承於Object這個超類的,在Object類中定義了一個equals的方法,這個方法的初始行爲是比較對象的內存地址,但在一些類庫當中這個方法被複寫了,如String、Integer、Date。在這些類當中equals有其自身的實現,而不再是比較類在堆內存中的存放地址了。 所以說,對於複合數據類型之間進行equals比較,在沒有覆寫equals方法的情況下,他們之間的比較還是內存中的存放位置的地址值,跟雙等號(==)的結果相同;如果被複寫,按照複寫的要求來。


面試題:請解釋字符串比較之中“==”和equals()的區別? 

==:比較的是兩個字符串內存地址的數值是否相等,屬於數值比較; equals():比較的是兩個字符串的內容,屬於內容比較。以後進行字符串相等判斷的時候都使用equals()。

三、總結:

“==”比較的是值【變量(棧)內存中存放的對象的(堆)內存地址 
equal用於比較兩個對象的值是否相同【不是比地址】 

【特別注意】Object類中的equals方法和“==”是一樣的,沒有區別,而String類,Integer類等等一些類,是重寫了equals方法,才使得equals和“==不同”,所以,當自己創建類時,自動繼承了Object的equals方法,要想實現不同的等於比較,必須重寫equals方法。

"=="比"equal"運行速度快,因爲"=="只是比較引用.



發佈了24 篇原創文章 · 獲贊 12 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章