设置短值Java

Mub*_*har 96 java literals primitive-types

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

设置Long值时,我可以使用setLongValue(100L)它,它的工作原理.那么,L这里的含义是什么,Short价值的特征是什么?

谢谢

Lau*_*uri 156

在Java中,整数文字的类型为int,除非它们以字母'L'或'l'为后缀(首选L是优选的,因为小写L很难与数字1区分).如果以L为后缀,则文字的类型为long.

后缀在Java语言规范中没有任何特殊名称.任何其他整数类型都没有后缀.因此,如果您需要短文本或字节文字,则必须将它们转换为:

byte foo = (byte)0;
short bar = (short)0;
Run Code Online (Sandbox Code Playgroud)

在setLongValue(100L)中,您不必必须包含L后缀,因为在这种情况下,int literal会自动扩展为long.这在Java语言规范中称为扩展原语转换.

  • 其他类型也有后缀:`d` /`D`使`double`和`f` /`F`成为浮点数! (15认同)
  • 另外:符合大小的文字不需要强制转换:你的两个例子也可以在没有强制转换的情况下工作. (4认同)
  • @Joachim:只有J5 +才需要演员表; 不幸的是,J2ME仍然在J4(一个严重剥离的J4). (3认同)
  • @JoachimSauer,"适合大小"是什么意思?我问,因为我只需要将'0`特定地转换成`(short)0`来绕过'从int到short'的可能有损转换错误,即使0是短的. (2认同)

er4*_*z0r 30

没有字节或短文字这样的东西.你需要施展简短的使用(short)100


mat*_*rns 18

通常,您可以将变量强制转换为short.

您也可能会遇到此类令人困惑的问题。这是因为+运营商将他们提升为int

在此处输入图片说明

铸造元素无济于事:

在此处输入图片说明

您需要转换表达式:

在此处输入图片说明

  • 按照这个逻辑,添加两个 int 将返回一个 long ;) (6认同)
  • 不要忘记,short + Short = int 是有原因的。如果两个 Short 的总和高于机器的最大 Short 值,则将其转换为 Short 将产生意外结果或引发异常(如果 languaje 支持)。 (2认同)

Law*_*Dol 8

你可以用setTableId((short)100).我认为这在Java 5中已经改变,因此分配给字节或短的并且在目标范围内的数字文字被自动假定为目标类型.最新的J2ME JVM源自Java 4.

  • 没有"J4"(也没有"J5".请不要让Java版本/命名方案比现在更混乱. (3认同)
  • @Joachim:Java 1,Java 2,Java 5,Java 6和Java 7是众所周知的,并且如此提及; 推断Java 3和Java 4的含义并不难."Jn"只是一个显而易见的缩写.对所有版本采用Sun当前(并且希望最终)的命名法可以减少混淆. (2认同)
  • @Joachim:根据孙的关于这个主题的最后一句话,领先的"1".Java"1.x"被视为在讨论中引用版本时从未出现过,并且仅在兼容性方面保留在JVM发出的版本中.因此,Java 2就是以前称为1.2的版本,J2SE最初来自这个版本(你会注意到Sun同时推荐不再使用J2xE,而是使用JavaEE,JavaSE和JavaME).因此1.3是Java 3,1.4是Java 4,1.5是Java 5,1.6是Java 6,1.7是Java 7.说真的,这并不难理解. (2认同)
  • "1" 在Java 5及更高版本中只被*剪切了.Sun的名称总是*引用Java 1.0-1.4*.这是故意完成的,因为Sun使用"Java 2"将Java 1.2引用到Java 1.5/Java 5.这非常令人困惑,但是发明Sun从未使用过的新名称并没有让它变得更容易. (2认同)