1

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

目前字节码看起来有点像这样

   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();

对 Number 进行演员表会更好吗?

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

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

4

3 回答 3

2

为什么要投?Bytes也有longValue()方法。

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

或者更好:

byte b = 1;
long value = (long) b;
于 2012-06-07T10:42:32.853 回答
0

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

于 2012-06-07T10:43:11.027 回答
0

从较小的整数到较大的整数,您不需要强制转换。它被称为提升和分配工作:

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

对于 Byte-byte 和 long-Long 转换,您可以使用自动装箱。

于 2012-06-07T11:06:49.097 回答