黑马程序员技术交流社区

标题: 浮点类型为何不能自动装箱呢 [打印本页]

作者: 第一印象    时间: 2013-9-5 11:10
标题: 浮点类型为何不能自动装箱呢
本帖最后由 第一印象 于 2013-9-5 21:52 编辑

JDK1.5的新特性中,支持将基本数据自动装箱成引用类型,比如:
Integer a = 12;
Byte b = 12;
Short c = 12;
Character d = 12;
但是浮点类型为什么只支持自动类型提升而不支持装箱呢?比如
float a = 2;
double b = 2;
这么些没问题,但是下面的写法就有问题了:
Float a = 2;
Double b = 2;



作者: 辛春鹏    时间: 2013-9-5 14:32
Autoboxing的机制有一个局限——只能把基本类型的数据往它们自己的包裹类(以及包裹类的上级类)上转化。

类似这样的代码是不能工作的,尽管int型的数据完全可以用一个Long对象来表示:
例:不能同时进行自动向上转型和Autoboxing
    int i = 27828;
    System.out.println((Long) i);/* 编译时出错 */
     
这是因为这段代码实际上相当于:
例:Autoboxing操作会在自动向上转型之前发生
    int i = 27828;
    System.out.println((Long) Integer.valueOf(i));/* 编译时出错 */
     
而Integer并不是Long的子类,所以这个转化无法进行。如果一定要进行这种操作,需要手工追加一次转型:
例:需要先强制向上转型,再作Boxing
    int i = 27828;
    System.out.println((Long)(long) i);

嘿嘿   查的时候是这样讲解的。楼主的问题正好可以这样的解释。
Float a = 2;  此时2  默认为int型。如果执行词句的话,就相当于将int型先提升为float型,然后在去自动装箱。而实际上自动装箱是发生在提升之前的。
作者: 第一印象    时间: 2013-9-5 15:48
辛春鹏 发表于 2013-9-5 14:32
Autoboxing的机制有一个局限——只能把基本类型的数据往它们自己的包裹类(以及包裹类的上级类)上转化。
  ...

了解了,谢谢,测试通过,跟你所讲完全一致,再问一下,你这个东西哪里了解到的?

作者: 黄文伯    时间: 2013-9-5 17:36
第一印象 发表于 2013-9-5 15:48
了解了,谢谢,测试通过,跟你所讲完全一致,再问一下,你这个东西哪里了解到的?
...

请及时将“未解决”修改为“已解决”!
作者: 辛春鹏    时间: 2013-9-6 15:55
第一印象 发表于 2013-9-5 15:48
了解了,谢谢,测试通过,跟你所讲完全一致,再问一下,你这个东西哪里了解到的?
...

谷歌一下啊。。。。O(∩_∩)O~





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