一開始碰見==和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源碼
比較案例