`
dabing521
  • 浏览: 3581 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

自动装箱拆箱原理及使用误区

    博客分类:
  • java
 
阅读更多
自动装箱与拆箱
1.实际上在编译器编译过程中使用Integer.valueOf(xxx)转换成Integer对象
拆箱则是调用integer对象的intValue方法;(可以自行查看.class文件)

2.Integer.valueOf(xxx)
默认情况是-128~127返回原始值
超过范围则返回Integer对象,因此
Integer i = 200;
Integer j = 200;
i == j是false
查看下面的源码
public static Integer valueOf(int i) {
        assert IntegerCache.high >= 127;
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }


  
  static {
            // high value may be configured by property
            int h = 127;
            String integerCacheHighPropValue =
                sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
            if (integerCacheHighPropValue != null) {
                int i = parseInt(integerCacheHighPropValue);
                i = Math.max(i, 127);
                // Maximum array size is Integer.MAX_VALUE
                h = Math.min(i, Integer.MAX_VALUE - (-low));
            }
            high = h;

            cache = new Integer[(high - low) + 1];
            int j = low;
            for(int k = 0; k < cache.length; k++)
                cache[k] = new Integer(j++);
        }


从源码中可以看出high的值是可以在property中配置,因此对于两个Integer对象的比较最好使用equals方法。
3.那么什么时候使用自动装箱(autoboxing)和自动拆卸(unboxing)呢?
    在引用类型(也即是包装类)与原生数据类型之间存在 “阻抗失谐”时,比如你想将一个数值 放入到 collection中。包括Integer的初始值为null,int的默认值是0。当0有实际含义时用Integer是有必要的。
    在科学计算或者其他性能要求高的数字计算中,是不适合使用自动装箱(autoboxing)和自动拆卸(unboxing)。
分享到:
评论

相关推荐

    C#语言参考 陈广36-39 完

    37章继续深入装箱与拆箱,通过BoxingAndUnboxing(2).swf文件可能提供了更多示例和实践案例,帮助开发者避免常见的陷阱和误区,比如不正确的类型转换可能导致的NullReferenceException。 38章转向了范型(Generic)...

    Java编程思想4课后习题答案

    "Java4"这个标签表明这个资料是针对Java的第4个主要版本,即Java SE 4(也称为J2SE 1.4),该版本发布于2002年,引入了诸如泛型、枚举、自动装箱拆箱等重要特性。在学习这个版本的习题答案时,你会了解到这些特性...

    More.Java.Pitfalls中文版

    1. **类型转换错误**:Java中的自动装箱和拆箱可能导致类型转换异常,尤其是在涉及原始类型和包装类的操作时。书中可能讲解如何正确处理这类情况。 2. **空指针异常(NullPointerException)**:这是Java中最常见的...

    Java编程中常见的坑

    为了方便比较,Java提供了一个特性叫做“自动装箱”,即自动地将基本数据类型转换为对应的包装类对象。 根据`Integer`类的设计,对于-128到127之间的整数值,`Integer.valueOf`方法会从缓存中返回相同的`Integer`...

    Java面试错误汇总.txt

    面试中的常见问题及误区 - **面试中的常见问题**:面试者经常会遇到一些基础性的问题,例如数据类型、类与对象的区别等。这些问题看似简单,但往往能反映出面试者对Java基础知识的理解程度。 - **误区分析**:有些...

    ASP.NET编程之道.part1.rar

    细节02 装箱和拆箱 细节03 理解值类型和引用类型 细节04 隐式转换和显式转换 细节05 前缀方式增1和减1运算符 细节06 理解移位运算符 细节07 理解运算的次序 细节08 理解参数的类型 细节09 重载方法 细节10 虚方法与...

    Java编写中容易搞错的一些东西

    其中 `&` 和 `|` 可以同时应用于 `int` 类型和 `boolean` 类型(通过自动装箱/拆箱)。然而,`^` 异或操作符仅适用于整数类型(`int`,`long`,`char`,`short`,`byte`),而不支持 `boolean` 类型。 ### 6. 文件...

Global site tag (gtag.js) - Google Analytics