我有一种方法,其中我收到的参数是“rowno”,它的类型是短的。代码如下所示。
private int abcd (int a , short rownum)
{
// method body
}
现在我的查询是这样的。在方法内部,当 rownum 的值为 5 时,我必须执行一些逻辑,所以我正在尝试这样
if (rowno == 5)
{
//perform some operation
}
请告诉我这是否是短类型的正确方法。
我有一种方法,其中我收到的参数是“rowno”,它的类型是短的。代码如下所示。
private int abcd (int a , short rownum)
{
// method body
}
现在我的查询是这样的。在方法内部,当 rownum 的值为 5 时,我必须执行一些逻辑,所以我正在尝试这样
if (rowno == 5)
{
//perform some operation
}
请告诉我这是否是短类型的正确方法。
那应该可以正常工作。
当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 的扩展原语转换根本不会丢失任何信息;数值被完全保留。
在 Java 中,Short 数据类型是一个 16 位有符号二进制补码整数。int 数据类型是 32 位有符号二进制补码整数。
因此,当您进行操作时,短数据将自动转换为 int 数据类型而不会出现问题。(不需要扩大原始转换 -> 没有信息丢失)
如果您的 rownum 参数与数据库行 id 或任何可能溢出短范围的数字有关,您可能会丢失整数信息。如果您 101% 确定您的输入参数值永远不会溢出短程,那么您就可以开始了。
不明白为什么那行不通。如果你真的想确定你总是可以这样做:
short compareValue = 5;
if(rownum == compareValue) {
//logic
}