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 提供任何后缀,如Ss。您需要使用(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;就不行为啥?

`short` 类型的简写? [复制]

java基础:数据类型的转化

为啥在 C 和 C++ 中的算术运算之前必须将 short 转换为 int?

怎样把unsigned short 转换为 unsigned char

Java使用括号转换为Integer的Short