在Java中如何避免这种情况下的类型转换

在Java中如何避免这种情况下的类型转换,java,casting,Java,Casting,情况就是这样,我必须从int到long再从long到int。我想知道我是否可以避免这个角色 long temp = (long) i + nums[i]; // i + nums[i] could be bigger than Integer.MAX_VALUE // i and nums[] both are int type. int row = (int) (temp % 2); int col = (int) (temp

情况就是这样,我必须从int到long再从long到int。我想知道我是否可以避免这个角色

long temp = (long) i + nums[i];  // i + nums[i] could be bigger than Integer.MAX_VALUE
                                 // i and nums[] both are int type.
int row = (int) (temp % 2);
int col = (int) (temp / 2);
其中
稍后将用于访问数组

我可以对
语句做一个更改

int row = (i%2 + nums[i]%2) % 2;

但是我没有任何时间效率高的实现来替换
col
语句,这样我就可以避免对第一个语句进行长时间强制转换

为什么
temp
a
long
?您是否希望值溢出?是的,在某些情况下,i+nums[i]将大于整数max。如果您使用的是java 8,则可以使用。其他答案中的其他策略也可能适用。当您添加2个
int
值并分配给
long
时,您不必进行显式类型转换。从较小的数据类型到较大的数据类型,Java进行自动类型转换。@MathewsMathai两个整数相加的结果是一个整数。如果有溢出,这将是错误的整数。只有这样,它才会被铸造成长形。因此OP首先铸造一个输入是正确的。