Java:必须转换为short,不能使用速记'S'
Posted
技术标签:
【中文标题】Java:必须转换为short,不能使用速记\'S\'【英文标题】:Java: must cast to short, cannot use shorthand 'S'Java:必须转换为short,不能使用速记'S' 【发布时间】:2015-06-11 03:02:40 【问题描述】:我正在尝试调用一个需要短值的函数。以下作品:
i.setDamage((short) 10);
但是,这不是:
i.setDamage(10S);
根据我使用的 IDE,这应该可以。为什么不呢?我正在使用 Maven 和 Java 7。
【问题讨论】:
您使用 Maven 的事实与您的问题无关。 Maven 不是编译器——它使用编译器。因此它并不真正关心代码的语法。 只是出于好奇,这是什么 IDE 认为 Java 允许为整数文字添加S
后缀?
@augray 好的,谢谢你解决这个问题。我真的不知道maven的过程中做了什么。
@Ted Hopp 我正在使用 Eclipse,当我需要一个 short 作为函数参数时,它接受了 '10S'。
【参考方案1】:
根据Java Language Specification, Section 3.10.1,整数文字的唯一整数类型后缀是L
(或小写l
)。
如果整数文字以 ASCII 字母 L 或 l (ell) 为后缀,则它是 long 类型;否则为 int (§4.2.1) 类型。
首选后缀 L,因为字母 l(ell)通常很难与数字 1(一)区分开来。
您只需要坚持使用演员表。 (尽管如果值在范围内,您可以只使用整数文字而不进行强制转换。)
【讨论】:
另见related question。 还有这个oracle nutsandbolts 谢谢,现在说得通了 :)【参考方案2】:根据 Java 语言,long 值将只包含 L 的后缀。
参考
Java Primitive Data types
【讨论】:
【参考方案3】:JAVA 没有为short
提供任何后缀,如S
或s
。您需要使用(short)100
转换为short
。
可能的值是
int num = 20; //Decimal
int num = 020; //octal
int num = 0x20; //Hexadecimal
int num = 0b1010; //binary
long num = 563L; //long
在 JDK 7 中,您可以在整数文字中嵌入一个或多个下划线,例如
int num = 19_90;
【讨论】:
不要对非代码文本使用代码格式。 您还可以为八进制、十六进制或二进制文字使用L
后缀(例如,0b1010L
)。以上是关于Java:必须转换为short,不能使用速记'S'的主要内容,如果未能解决你的问题,请参考以下文章
java, short s=100; 可以。但是 int i=100; short s=i;就不行为啥?
为啥在 C 和 C++ 中的算术运算之前必须将 short 转换为 int?