Java-装箱拆箱

包装类(Wrapper Class)

八个和基本数据类型对应的类统称为包装类(Wrapper Class)

基本数据类型 包装类
byte Byte
boolean Boolean
short Shrot
char Character
int Integer
long Long
float Float
double Double

包装类的缓存

包装类 缓存范围
Integer [-128, 127]
Long [-128, 127]
Short [-128, 127]
Byte [-128, 127]
Character [0, 127]
Boolean True,False

具体可以查看对应包装类的valueOf代码实现。

    // Integer valueOf代码实现
    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

因此会有如下现象:

        Integer i1 = 100;
        Integer i2 = 100;
        Integer i3 = 200;
        Integer i4 = 200;

        System.out.println(i1 == i2); // true
        System.out.println(i3 == i4); // false

代码

        Integer i = 10; // 装箱使用Integer.valueOf()
        int n = i;      // 拆箱使用Integer.intValue()

        Integer i1 = 100;
        Integer i2 = 100;
        Integer i3 = 200;
        Integer i4 = 200;

        System.out.println(i1 == i2);
        System.out.println(i3 == i4);

        Long l1 = 200L;
        Long l2 = 300L;

        // 包装类的+、-、*、/都会先进行拆箱后再进行运算。
        Long l3 = i1 + l1;                      // 100 + 200L = 300L -> Long
        System.out.println(l1.equals(i1 + i2)); // false i1 + i2 => Integer
        System.out.println(l2.equals(i1 + l1)); // true  i1 + l1 => Long
        Integer i5 = 50 + 50;
        System.out.println(i1 == (50 + 50));    // true
        System.out.println(i1 == i5);           // true
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 结果是 产生这样的结果的原因是:Byte、Short、Integer、Long、Char这几个装箱类的valueO...
    ADark0915阅读 266评论 0 1
  • 参考JAVA装箱拆箱及面试题C#装箱拆箱 定义装箱是将值类型转换为引用类型,拆箱是将引用类型转换为值类型。利用装箱...
    合肥黑阅读 208评论 0 0
  • SonarQube系列 目录 SonarQube (1) 基本环境搭建 SonarQube (2) sonar r...
    严北阅读 5,840评论 0 1
  • 《活法》书中写到“利他”,简单地说是"与人为善",也可以说"为世人,为社会尽力"。 “利他”的行为生活...
    北辕南辙阅读 186评论 0 0
  • 今日收获: 1.早上带领大家在宾馆外面拍照发给单位; 2.下午与大家去后面爬山,锻炼身体; 3.与同事化解小矛盾;...
    菜菜子_forest阅读 176评论 0 0