【问题标题】:How to specify a constant is a byte or short?如何指定一个常量是字节还是短?
【发布时间】:2012-01-14 08:01:14
【问题描述】:

对于长数据类型,我可以在数字后加 ​​L 让编译器知道它是长的。 byte和short呢?

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

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

【问题讨论】:

    标签: java


    【解决方案1】:

    您实际上在谈论的是整数 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
    

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

    你的例子是另一个例子。


    但最重要的是,没有用于表达 byteshort 文字的 Java 语法。

    【讨论】:

    • 谢谢。 (我希望这不是赞成票的目的...... :-))
    • 不,但我可以给你 -1 以在我之前达到 100k。 ;)
    • “没关系”——如果你试图使用文字作为方法或构造函数的参数,它会起作用。 :(
    • @yshavit 例如在 Junit 中:assertEquals((Short) (short) 2, myCalculatedShortPrimitive());
    • @yshavit - 他总是可以浮动语言增强的想法,但我认为它成功的可能性很长
    【解决方案2】:

    It's done automatically for you at the point of use

    如果一个 int 字面量被分配给一个 short 或一个 byte 并且它的值是 在合法范围内,字面量假定为短字节或字节。

    【讨论】:

      【解决方案3】:

      例如:

      public static final byte CURRENCY_SYMBOL = 26;
      
      public static final short MAX_VALUE = 3276;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-08
        • 2015-12-27
        • 1970-01-01
        • 2014-01-15
        • 1970-01-01
        • 2013-02-21
        • 2017-12-27
        相关资源
        最近更新 更多