设置短值Java


114

我在J2ME中编写一些代码。我有一个带方法的课setTableId(Short tableId)。现在,当我尝试编写setTableId(100)时会出现编译时错误。如何在不声明另一个short变量的情况下设置short值?

设置Long值时,我可以使用setLongValue(100L)并且可以使用。那么,这L意味着什么Short?价值的特征是什么?

谢谢


L只是用于表示long文字的后缀。
missingfaktor

Answers:


174

在Java中,整数文字默认情况下为int类型。对于一些其他类型的,你可以后缀文字与像不区分大小写字母LDF指定一个长,双重或浮动分别。请注意,通常使用大写字母以提高可读性。

Java语言规范没有为字节或短类型提供相同的语法糖。相反,您可以使用显式强制转换声明为:

byte foo = (byte)0;
short bar = (short)0;

setLongValue(100L)方法调用中,不必一定包含L后缀,因为在这种情况下,int文字会自动扩展为long。在Java语言规范中,这称为加宽基元转换。


16
还有其他类型的后缀:d/ D使一个doublef/ F使一个浮点数!
Joachim Sauer'2

6
另外:不需要转换适合大小的文字:您的两个示例也无需转换。
Joachim Sauer 2010年

你们两个都对。我应该更清楚一点,我在这里谈论的是整数文字,而不是浮点文字。
劳里

4
@Joachim:仅J5 +不需要强制转换;不幸的是,J2ME仍然在J4上(严重剥离了J4)。
劳伦斯·多尔

2
@JoachimSauer,“适合大小”是什么意思?我之所以问是因为即使0很短,我也必须专门将其强制转换0(short)0可以避免possible lossy conversion from int to short错误。
ryvantage '16

34

没有字节或简短文字。您需要转换为短使用(short)100


9

通常,您只需将变量转换为即可short

您还会遇到类似这样的令人困惑的问题。这是因为+运营商将其提升为int

在此处输入图片说明

投射元素无济于事:

在此处输入图片说明

您需要转换表达式:

在此处输入图片说明


1
不要忘记short + short = int是有原因的。如果两次短路的总和高于机器的最大短路值,则在languaje支持的情况下,将其强制转换为短路将产生意外结果或引发异常。
DGoiko

2
按照这种逻辑,将两个整数相加将返回一个长的;)
马特伯恩斯

1
如果我的总和能超过Integer.MAX_VALUE,我就会寻找。我不是在为返回int的决定辩护(这可能与HW实际执行总和的方式有关),我只是说人们应该在将结果放入其中之前确认结果确实填写了很短的时间。与上限int相比,我遇到了更多的错误来限制短容量,这可能是由于涉及的数字大小所致。2个小字节的Java预留空间,用于短
容量存储,

1
我再次阅读了我的评论,但我没有阐明我的观点。第一句话令人困惑,我不应该这么说,仅剩下剩下的,看起来好像有两个相关的语句。short + short int背后的原因可以在这里阅读:docs.oracle.com/javase/specs/ jvms / se8 / html /…,在JVM中没有总和运算。Java的int是32位,因此,当进行这种确定时,大多数计算机都是32位,所以我想int看起来是最好的主意。
DGoiko

1
还要注意,如此处stackoverflow.com/a/27123302/9465588所述,JVM实际上确实为每个类字段至少为其虚拟内存空间提供了32位服务器,因此声明短字段根本不会节省内存。我不知道Java是否改变了这一点。我倾向于从不使用短值,除非涉及外部限制,例如DAO
DGoiko

8

您可以使用setTableId((short)100)。我认为这在Java 5中已更改,因此分配给目标的字节或短整数和范围内的数字文字被自动假定为目标类型。不过,最新的J2ME JVM源自Java 4。


PS:欢迎来到陷入J2ME编码的中年痛苦中。等不及手持设备赶上2000年台式机了。
劳伦斯·多尔

3
没有“J4”(没有“J5”请不要在Java版本/任何更多命名方案比它已经是混乱。
约阿希姆·绍尔

2
@Joachim:Java 1,Java 2,Java 5,Java 6和Java 7是众所周知的,因此被引用;推断Java 3和Java 4的含义并不难。“ Jn”只是显而易见的缩写。所有版本均采用Sun当前的名称(最好是最终版本)可以减少混乱。
劳伦斯·多尔

2
@Joachim:根据Sun关于该主题的最后一句话,以“ 1”开头。参考所讨论的版本时,应将Java“ 1.x”的版本视为从未出现过,并且仅出于兼容性的原因而保留在JVM发出的版本中。因此,Java 2是以前称为J2SE的1.2版本(您会注意到,Sun同时建议不要使用J2xE,而应该使用JavaEE,JavaSE和JavaME)。因此,1.3是Java 3,1.4是Java 4,1.5是Java 5,1.6是Java 6,而1.7是Java7。说真的,这并不是很难理解的。
劳伦斯·多尔

2
“ 1”。在Java 5和更高版本中被删除。Sun 始终使用该名称引用Java 1.0-1.4 。这是有意完成的,因为Sun使用“ Java 2”来指代Java 1.2直至Java 1.5 / Java5。这非常令人困惑,但是发明从未使用过的新名称并没有使它变得更容易。
Joachim Sauer'2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.