如果java中的数字自动拆箱使用Number.xxxValue()而不是强制转换为XXX.xxxValue()?

时间:2012-06-07 10:39:04

标签: java

示例效果最好,想象Object是一个Byte,我们尝试将它转换为long ...

目前字节代码看起来有点像

   Byte b = Byte.valueOf(1);
   Object source = b;
   Long long = (Long) source;     // fails CCE because a Byte is not a Long
   long value = long.longValue();

对数字的投射会不会更好?

  Byte b = Byte.valueOf(1);
   Number number = (Number) b;     // f
   long value = number.longValue();

真正的问题当然是我们减少了ClassCastExceptions的可能性,这是件坏事吗?

3 个答案:

答案 0 :(得分:2)

为什么选择投球? Byte也有longValue()方法。

Byte b = Byte.valueOf(1);
long value = b.longValue();

或者更好:

byte b = 1;
long value = (long) b;

答案 1 :(得分:0)

如果您不关心原始类型是什么,我会像您一样转换为数字。

答案 2 :(得分:0)

从较小的int到较大的int,你不需要铸造。它被称为促销,并按作业工作:

    byte b = (byte) 200;
    long l = b;
    Long ll = l;

对于字节字节和长整型转换,您可以使用自动装箱。