0

我有一种方法,其中我收到的参数是“rowno”,它的类型是短的。代码如下所示。

private int abcd (int a , short rownum)
{
    // method body
}

现在我的查询是这样的。在方法内部,当 rownum 的值为 5 时,我必须执行一些逻辑,所以我正在尝试这样

if (rowno == 5)
{
     //perform some operation

}

请告诉我这是否是短类型的正确方法。

4

4 回答 4

3

那应该可以正常工作。

rowno是 ashort时,表达式rowno == 5等价于,((int) rowno) == 5因为 Java 隐式提升原始操作数。

Java语言规范

5.6.2. 二进制数字提升

当运算符将二进制数值提升应用于一对操作数时,每个操作数都必须表示一个可转换为数值类型的值,以下规则按顺序适用:

2 加宽原语转换(第 5.1.2 节)适用于转换以下规则中指定的一个或两个操作数:

  • 如果任一操作数是 double 类型,则另一个操作数将转换为 double。
  • 否则,如果任一操作数的类型为浮点型,则另一个将转换为浮点型。
  • 否则,如果任一操作数是 long 类型,则另一个将转换为 long。
  • 否则,两个操作数都转换为 int 类型

对某些运算符的操作数执行二进制数值提升:

...

  • 数值相等运算符==!=

并且这里发生的转换是安全的

5.1.2. 扩大基元转换

原始类型的 19 种特定转换称为扩展原始类型转换:

  • ...
  • 短到 int、long、float 或 double
  • ...

在 strictfp 表达式(第 15.4 节)中,从整数类型到另一种整数类型或从 float 到 double 的扩展原语转换根本不会丢失任何信息;数值被完全保留。

于 2013-05-21T06:42:06.823 回答
2

在 Java 中,Short 数据类型是一个 16 位有符号二进制补码整数。int 数据类型是 32 位有符号二进制补码整数。

因此,当您进行操作时,短数据将自动转换为 int 数据类型而不会出现问题。(不需要扩大原始转换 -> 没有信息丢失)

于 2013-05-21T06:41:20.213 回答
0

如果您的 rownum 参数与数据库行 id 或任何可能溢出短范围的数字有关,您可能会丢失整数信息。如果您 101% 确定您的输入参数值永远不会溢出短程,那么您就可以开始了。

于 2013-05-21T06:45:41.487 回答
0

不明白为什么那行不通。如果你真的想确定你总是可以这样做:

short compareValue = 5;

if(rownum == compareValue) {
    //logic
}
于 2013-05-21T06:40:36.710 回答