黑马程序员技术交流社区
标题:
关于包装类的问题,请帮忙说下....!
[打印本页]
作者:
smile_joe
时间:
2013-4-19 23:05
标题:
关于包装类的问题,请帮忙说下....!
本帖最后由 smile_joe 于 2013-4-20 19:24 编辑
在jdk 1.5 后出来自动装箱 自动拆箱新特新,学完后,感觉总是朦朦胧胧的,没有具体的那种感觉?
---------请帮忙分析下自动装箱,拆箱的原理/实现,什么时候可以直接用;什么时候有不能直接去用?十分感谢...
作者:
Neverbelazy
时间:
2013-4-20 00:36
本帖最后由 Neverbelazy 于 2013-4-20 01:13 编辑
1.当基本数据类参与数学运算时,可以直接被看做是 基本数据类型
2.当定义的函数需要 输入类型为基本数据类型时,也可以传入 相应的基本数据类型类
3.Integer 类中,当对象值在 -128~127之中时,对象在内存中是唯一的,任何引用都指向同一个对象;在其外,每一个新生成的对象都开辟新的空间
4.程序自动初始化时,初始化值是null;
5.基于3,4;自动装拆有风险
参看如下代码
public class FinalTest {
static Integer i;
public static void main(String[] args){
//
Integer j=200; //局部对象,自动装箱
System.out.println(j); //自动拆箱,输出200
// Integer i; 初始化是0吗?
System.out.println(i); //此时,i 是成员变量,输出的是null,此处不存在自动装箱初始化0
//System.out.println(i+0); //此句报错
i=200; //自动装箱,拆箱可以容许这样的代码
System.out.println(i+0); // 自动装箱,输出200
// Integer 对象在 -128-127 值范围内,是在内存唯一的对象,所有引用指向同一个对象 之外则是不同对象
System.out.println("i==j?:"+(i==j)); // 输出 false ,这个运算时直接比较的地址值
System.out.println("i==j?:"+((i+0)==(j+0))); //输出true,运算了,装箱了。。。就true了
i=100; j=100;
System.out.println("i==j?:"+(i==j)); // 输出 false ,这个运算时直接比较的地址值,但是这个这两引用,j指向同一个对象
//自己定义的函数中,也可以自动装箱
testForFunction(i);
}
public static void testForFunction(int x){
System.out.println(x);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2