我有一个方法,我收到的参数是“rowno”,类型为short。 代码如下所示。
private int abcd (int a , short rownum)
{
// method body
}
现在我的查询就是这个。在方法内部我必须执行一些逻辑时的值 rownum是5,所以我正在尝试这样
if (rowno == 5)
{
//perform some operation
}
请告诉我这是否是短型的正确方法。
答案 0 :(得分:3)
这应该可以正常工作。
当rowno
为short
时,表达式rowno == 5
等同于((int) rowno) == 5
,因为Java隐式提升了原始操作数。
根据,5.6.2。二进制数字促销
当运算符将二进制数字提升应用于一对操作数时,每个操作数必须表示可转换为数字类型的值,以下规则适用:
2扩展原语转换(第5.1.2节)用于转换由以下规则指定的一个或两个操作数:
- 如果任一操作数的类型为double,则另一个操作数将转换为double。
- 否则,如果任一操作数的类型为float,则另一个操作数转换为float。
- 否则,如果任一操作数的类型为long,则另一个操作数将转换为long。
- 否则,两个操作数都将转换为int 。
对某些运算符的操作数执行二进制数字提升:
...
- 数字相等运算符
==
和!=
这里发生的转换是安全的
5.1.2。扩大原始转换
对原始类型的19个特定转换称为扩展原语转换:
- ...
- 简称为int,long,float或double
- ...
在strictfp表达式(第15.4节)中,从整数类型到另一个整数类型或从float到double的扩展原语转换根本不会丢失任何信息;数值完全保留。
答案 1 :(得分:2)
在Java中, 短数据类型是16位带符号的二进制补码整数。 和int数据类型为32位带符号的二进制补码整数。
因此,当您执行操作时,短数据将自动转换为int数据类型而不会出现问题。 (不需要扩展原始转换 - >没有信息丢失)
答案 2 :(得分:0)
不明白为什么那不起作用。如果你真的想确定你总能做到这一点:
short compareValue = 5;
if(rownum == compareValue) {
//logic
}
答案 3 :(得分:0)
如果你的rownum参数与数据库行id有关,或任何可能超出short范围的数字,你可能会丢失整数信息。如果你有101%确定你的输入参数值永远不会溢出短距离你就可以了。