【发布时间】:2012-01-14 08:01:14
【问题描述】:
对于长数据类型,我可以在数字后加 L 让编译器知道它是长的。 byte和short呢?
作为动机,以下会产生类型不匹配错误:
List<Short> a = Arrays.asList(1, 2, 3, 4);
【问题讨论】:
标签: java
对于长数据类型,我可以在数字后加 L 让编译器知道它是长的。 byte和short呢?
作为动机,以下会产生类型不匹配错误:
List<Short> a = Arrays.asList(1, 2, 3, 4);
【问题讨论】:
标签: java
您实际上在谈论的是整数 literal (1) 与长 literal (1L)。在 Java 中实际上没有短字面量或字节字面量之类的东西。但它通常并不重要,因为存在从整数文字到byte、short 和char 类型的隐式转换。因此:
final byte one = 1; // no typecast required.
仅当文字在所需范围内时才允许隐式转换。如果不是,您需要类型转换;例如
final byte minusOne = (byte) 255; // the true range of byte is -128 .. +127
还有其他需要显式转换的情况;例如消除方法重载的歧义,或强制表达式中的特定解释。在这种情况下,您需要使用强制转换来进行转换。
你的例子是另一个例子。
但最重要的是,没有用于表达 byte 或 short 文字的 Java 语法。
【讨论】:
assertEquals((Short) (short) 2, myCalculatedShortPrimitive());
It's done automatically for you at the point of use
如果一个 int 字面量被分配给一个 short 或一个 byte 并且它的值是 在合法范围内,字面量假定为短字节或字节。
【讨论】:
例如:
public static final byte CURRENCY_SYMBOL = 26;
public static final short MAX_VALUE = 3276;
【讨论】: