自动装箱与拆箱
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)。
分享到:
相关推荐
37章继续深入装箱与拆箱,通过BoxingAndUnboxing(2).swf文件可能提供了更多示例和实践案例,帮助开发者避免常见的陷阱和误区,比如不正确的类型转换可能导致的NullReferenceException。 38章转向了范型(Generic)...
"Java4"这个标签表明这个资料是针对Java的第4个主要版本,即Java SE 4(也称为J2SE 1.4),该版本发布于2002年,引入了诸如泛型、枚举、自动装箱拆箱等重要特性。在学习这个版本的习题答案时,你会了解到这些特性...
1. **类型转换错误**:Java中的自动装箱和拆箱可能导致类型转换异常,尤其是在涉及原始类型和包装类的操作时。书中可能讲解如何正确处理这类情况。 2. **空指针异常(NullPointerException)**:这是Java中最常见的...
为了方便比较,Java提供了一个特性叫做“自动装箱”,即自动地将基本数据类型转换为对应的包装类对象。 根据`Integer`类的设计,对于-128到127之间的整数值,`Integer.valueOf`方法会从缓存中返回相同的`Integer`...
面试中的常见问题及误区 - **面试中的常见问题**:面试者经常会遇到一些基础性的问题,例如数据类型、类与对象的区别等。这些问题看似简单,但往往能反映出面试者对Java基础知识的理解程度。 - **误区分析**:有些...
细节02 装箱和拆箱 细节03 理解值类型和引用类型 细节04 隐式转换和显式转换 细节05 前缀方式增1和减1运算符 细节06 理解移位运算符 细节07 理解运算的次序 细节08 理解参数的类型 细节09 重载方法 细节10 虚方法与...
其中 `&` 和 `|` 可以同时应用于 `int` 类型和 `boolean` 类型(通过自动装箱/拆箱)。然而,`^` 异或操作符仅适用于整数类型(`int`,`long`,`char`,`short`,`byte`),而不支持 `boolean` 类型。 ### 6. 文件...