如何指定一个常量是byte还是short?

15

对于长整型 (long data type),我可以在数字后面加上 L 来让编译器知道它是长整型。那么对于字节型和短整型呢?

作为动机,以下代码会产生类型不匹配的错误:

List<Short> a = Arrays.asList(1, 2, 3, 4);
3个回答

19

你所说的实际上是一个整数字面量(literal)(1)与一个长整数字面量(literal)(1L)之间的区别。在Java中,实际上并不存在短整型或字节型字面量,但通常这并不重要,因为存在从整数字面量到byteshortchar类型的隐式转换。因此:

final byte one = 1;  // no typecast required.

只有当字面量在所需范围内时,才允许进行隐式转换。如果不在所需范围内,您需要进行类型转换,例如:

final byte minusOne = (byte) 255;  // the true range of byte is -128 .. +127

还有一些情况需要进行显式转换,例如为了消除方法重载的歧义或在表达式中强制特定的解释。在这种情况下,您需要使用强制转换来进行转换。

你的例子就是这些情况之一。


但归根结底,Java没有表达byteshort字面量的语法。


3
“无所谓”——如果您试图将该字面值用作方法或构造函数的参数,则确实很重要。:( - yshavit
1
例如在 Junit 中:assertEquals((Short) (short) 2, myCalculatedShortPrimitive()); - Markus Pscheidt
@yshavit 是的,令人惊讶和失望的是,当作为参数提供时,它不会执行类似的隐式转换。 - reads0520
2
@yshavit - 他总是可以提出语言增强的想法,但我认为它成功的可能性很小。 - Stephen C
@StephenC 你必须真正地加倍努力。 - yshavit
显示剩余2条评论

5

链接无效 - “404未找到”。 - undefined

1

例如:

public static final byte CURRENCY_SYMBOL = 26;

public static final short MAX_VALUE = 3276;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接