国产探花免费观看_亚洲丰满少妇自慰呻吟_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 則在緩存的范圍內,故返回的是同一個對象。引用地址相同。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 报价| 美姑县| 社旗县| 买车| 忻城县| 鸡东县| 四子王旗| 江山市| 正蓝旗| 晋宁县| 芦溪县| 石屏县| 武清区| 景德镇市| 谢通门县| 九台市| 长垣县| 阜南县| 个旧市| 井冈山市| 福安市| 蛟河市| 紫阳县| 黄大仙区| 句容市| 中西区| 麻城市| 兰坪| 喀喇沁旗| 专栏| 隆林| 五原县| 望奎县| 沭阳县| 长岛县| 长武县| 怀安县| 湘潭市| 乡城县| 扎赉特旗| 平顶山市|