国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

再談包裝類Integer對象的比較

2019-11-15 01:13:34
字體:
來源:轉載
供稿:網友
再談包裝類Integer對象的比較
public class CompareDemo {    public static void main(String[] args) {        int a = 128, b = 128;        System.out.PRintln(a == b); // true                 Integer c = 128, d = 128;        System.out.println(c == d); // false                System.out.println(c.equals(d)); // true                 Integer e = -128, f = -128;        System.out.println(e == f); // true    }}

我們在命令行執行一下

1. javac CompareDemo.java

2. javap -c CompareDemo

部分截圖如下:

可以看到在 在執行Integer c = 128, d = 128; 時調用了兩次 Integer.valueOf()函數。

所以語句Integer c = 128 ; 等同于Integer c =Integer.valueOf(128);

Integer d = 128 ;等同于Integer d =Integer.valueOf(128);

我們從源碼中看下這個函數的實現:

public static Integer valueOf(int i) {    final int offset = 128;    if (i >= -128 && i <= 127) { // must cache         return IntegerCache.cache[i + offset];    }        return new Integer(i);    }

很明顯當i >= -128 且 i <= 127 時,我們返回的是緩存中的Integer的對象。

內部類 IntegerCache 定義如下:

private static class IntegerCache {    private IntegerCache(){}    static final Integer cache[] = new Integer[-(-128) + 127 + 1];    static {        for(int i = 0; i < cache.length; i++)        cache[i] = new Integer(i - 128);    }    }

這就解釋了為什么 c == d 返回的為什么是false了, c,d 這里都是對象,== 比較的是引用的地址,

c.equals(d) 才是對象中值的比較。正是因為c,d 的128超出了IntegerCache緩存的范圍,所以c,d

是兩個不同的對象,自然引用地址也不同。

而e , f 的-128 則在緩存的范圍內,故返回的是同一個對象。引用地址相同。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 晋城| 明溪县| 博乐市| 武义县| 常州市| 体育| 读书| 邹城市| 津南区| 安达市| 怀远县| 蛟河市| 四平市| 织金县| 鸡东县| 西乌| 科尔| 海阳市| 黔南| 资源县| 沈阳市| 边坝县| 乌拉特后旗| 达州市| 双柏县| 仁布县| 阿勒泰市| 瑞安市| 绵竹市| 易门县| 丽水市| 阿克陶县| 安仁县| 洞口县| 固镇县| 阿拉善盟| 徐水县| 西平县| 郯城县| 荆门市| 勐海县|