对于长整型 (long data type),我可以在数字后面加上 L 来让编译器知道它是长整型。那么对于字节型和短整型呢?
作为动机,以下代码会产生类型不匹配的错误:
List<Short> a = Arrays.asList(1, 2, 3, 4);
对于长整型 (long data type),我可以在数字后面加上 L 来让编译器知道它是长整型。那么对于字节型和短整型呢?
作为动机,以下代码会产生类型不匹配的错误:
List<Short> a = Arrays.asList(1, 2, 3, 4);
你所说的实际上是一个整数字面量(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
还有一些情况需要进行显式转换,例如为了消除方法重载的歧义或在表达式中强制特定的解释。在这种情况下,您需要使用强制转换来进行转换。
你的例子就是这些情况之一。
但归根结底,Java没有表达byte
或short
字面量的语法。
如果将int字面量赋给short或byte,并且其值在合法范围内,则该字面量被认为是short或byte。
例如:
public static final byte CURRENCY_SYMBOL = 26;
public static final short MAX_VALUE = 3276;
assertEquals((Short) (short) 2, myCalculatedShortPrimitive());
- Markus Pscheidt