示例代碼:
反編譯字節(jié)碼:
1
2
3
4
5
6
7
8
9
|
public static void main(String args[]) { Integer a = new Integer( 10111 ); int b = 10111 ; boolean equal1 = a.intValue() == b; boolean equal2 = a.equals(Integer.valueOf(b)); System.out.println(equal1); System.out.println(equal2); } |
1:可以看出對于Integer與int使用==比較大小的話,優(yōu)先Integer拆箱。
2: 如果使用equals比較大小的話,則int裝箱。
提示:對于Integer與int之間大小比較優(yōu)先使用equals比較,否則容易出現(xiàn)空指針,例如:
Integer c= null;
System.out.println(c==1);
原因:由于Integer需要調(diào)用intValue進行拆箱,因而空指針。
Integer與Integer必須使用equals方法比較,這個就不必解釋了。但是通常我們可以看先Integer與Integer之間使用==也可以正確比較,原因是:Integer對于-128到127之間的數(shù)字在緩存中拿,不是創(chuàng)建新對象。
緩存獲取數(shù)據(jù)源碼:java.lang.Integer#valueOf(int)
1
2
3
4
5
|
public static Integer valueOf( int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } |
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://www.cnblogs.com/leodaxin/p/9088036.html