【问题标题】:Casting and wrappers: some strange cases铸造和包装:一些奇怪的案例
【发布时间】:2013-04-25 19:29:08
【问题描述】:

看看这个......今晚我试图将一些原始人投射到包装器时发现:

Integer i = (Integer)4;
Integer i = (Integer)4f; // Doesn't compile!

但是如果我重写第二行:

Integer i2 = (int)4f; // Then it compiles

有什么区别?为什么我应该能够在第一种情况下使用包装类进行强制转换,而在第二种情况下却不行?

【问题讨论】:

    标签: java casting wrapper


    【解决方案1】:

    这里

    Integer i = (Integer)4f; 
    

    您正在将浮点原语转换为整数包装器 - 它们不适合。这也与自动装箱无关。即使使用显式装箱,这仍然无法编译:

    Integer i = (Integer)(Double.valueOf(4f));
    

    在这里:

    Integer i2 = (int)4f;
    

    您将 float 原语转换为 int 原语(在此过程中截断),然后 java 自动为您将其封装为 Integer

    【讨论】:

      猜你喜欢
      • 2020-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 1970-01-01
      相关资源
      最近更新 更多