Java中==和equals和區別詳解+案例

一開始碰見==和equals我也是分不清,後來看了不少博客,收益匪淺,數組

擔憂之後給忘了,因此寫下這個,之後複習能夠用。緩存

(有哪裏寫得不對的,但願能夠留言幫忙改進,你們一塊兒共同進步)spa

1、Java數據類型一共分爲兩大類:基本數據類型、引用數據類型:code

  1.基本數據類型:對象

    整數型:blog

      整型:byte、short、int、long繼承

     浮點型:float、double接口

    字符型:char字符串

    布爾型:boolean源碼

  2.引用數據類型:

    數組、類、接口

2、基本數據類型的比較

   基本類型的比較只能用==比較,沒辦法用equals比較,沒有該方法,包裝類纔有

  

3、基本類型和包裝類型的比較

  裝箱:int-->Integer,拆箱:Integer-->int

  1.基本型和包裝型進行「==」運算符的比較,包裝類型將會自動拆箱變爲基本型後再進行比較

  2.關於equals的比較,咱們先看下它的源碼

  這個是Object的equals源碼,很明顯是比較兩個的地址是否同樣

  

   下面這圖是Integer建立時的源碼,

         Integer a = 3;      //建立調用的是Integer類中的valueOf(int i )方法,當給的數值大於-128小於127返回的IntegerCache中緩存中的值,大於直接返回對象
         Integer b = new Integer(3);    /建立/調用了Integer的構造方法

    

  這個是Integer的equals,說明他重寫了object的源碼,他是先比較類型是否同樣,

  若是類型不同直接返回false,若是類型同樣,他會先進行拆箱後再比較。

   

  int和Integer的比較實例

    

4、String類型的比較

   1.String關於==的比較是看他的地址是否是同樣,可是String他比較特殊,他有個字符串常量池,直接定義字符串(不是new的狀況)

   他會先到字符串常量池看以前有沒有,有就直接指向以前的。沒有就建立(指的是new)。

   

    2.equals:由於String繼承了Object的equals並重寫了equals.看下面的源碼,咱們能夠看出來,他是先判斷是否是同一對象,若是是直接返回true,

     若是不是他就比較內容是否一致。

    

    String比較實例

  

5、引用類型的比較

  引用類型的比較最直接不管是==仍是equals都是比較地址

  這是equals源碼

   

   比較案例

    

相關文章
相關標籤/搜索