黑马程序员技术交流社区

标题: 关于包装类的装箱拆箱问题 [打印本页]

作者: 张淼    时间: 2012-9-20 21:51
标题: 关于包装类的装箱拆箱问题
编译并运行以下代码的输出结果是?
Integer ten = new Integer(10);
Long nine = new Long (9);
System.out.println(ten + nine);   //问题1:此句中含有两个包装类,句中不是会将其自动拆箱成int和long型数据么?
int i = 1;
System.out.println(i + ten);   //问题2:此句中只含有一个包装类,这句也是错误的么?
                                           //问题3:装箱和拆箱只有在赋值的时候才会进行么?
A19
       20
B19
      11
C、编译出错:不能对java.lang.Integer进行转换  //C项为正确答案。
D10
       1

作者: 张忠豹    时间: 2012-9-20 22:07
首先值得一说的是自动装箱和拆箱是JDK1.5的新特性,只有在JDK1.5或以上环境上才可以进行操作,在此我用的是JDK1.6,所以没问题,答案是:B
问题1:句中的两个包装类会将ten和nine自动拆箱成int和long型数据,然后整型数据ten,会自动类型提升,结果为long类型的数据。
问题2:该句中的包装类的操作是正确的,当然是在JDK1.5或以上的环境上运行,首先ten会自动拆箱,然后与整型变量i相加,结果为int类型的数据
问题3:楼主的话,是不严谨的,装箱和拆箱在赋值的时候是可以进行的,当然其他的情况下也是可以的。

作者: 霍永刚    时间: 2012-9-20 23:30
要理解装箱和拆箱的概念,就要理解Java数据类型

装箱:把基本类型用它们相应的引用类型包装起来,使其具有对象的性质。int包装成Integer、float包装成Float

拆箱:和装箱相反,将引用类型的对象简化成值类型的数据

Integer a = 100;                  这是自动装箱  (编译器调用的是static Integer valueOf(int i))
int     b = new Integer(100); 这是自动拆箱






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2