Java 如何安全地将int向下转换为short?

Java 如何安全地将int向下转换为short?,java,types,casting,Java,Types,Casting,我有以下Java代码: shortVar = (short) intVar; 但有时它给了我不同于我预期的价值观。 当代码无法正确强制转换并抛出错误消息时,我能保护代码免受这种情况影响的最佳方法是什么?首先,我建议您不要使用short类型:普通Java编程规则不推荐这种类型(由于短数据占用16位,而现代体系结构占用64位数据,因此空间性能较低) 但是,只有当您必须绝对使用short变量时,确保不会超出适当范围的正确方法是: if (intVar <= Short.MAX_VALU

我有以下Java代码:

shortVar = (short) intVar;
但有时它给了我不同于我预期的价值观。
当代码无法正确强制转换并抛出错误消息时,我能保护代码免受这种情况影响的最佳方法是什么?

首先,我建议您不要使用
short
类型:普通Java编程规则不推荐这种类型(由于短数据占用16位,而现代体系结构占用64位数据,因此空间性能较低)

但是,只有当您必须绝对使用
short
变量时,确保不会超出适当范围的正确方法是:

    if (intVar <= Short.MAX_VALUE && intVar >= Short.MIN_VALUE)
    {
        short shortVar=(short)intVar;
        ...
    }
    else
    {
        // The cast shall not be safely done.
        ...
    }
if(intVar=Short.MIN\u值)
{
short shortVar=(short)intVar;
...
}
其他的
{
//不得安全进行铸造。
...
}

首先检查
intVarShort.MAX_VALUE
?测试该值是否超出Short的有效范围。非常感谢,我不知道Short类有MAX和MIN值。您也可以使用
Short
类型进行16位无符号模加/模减(当然是模2^16)。但完成后,您可能需要将其转换回右有符号整数值:
s&0xFFFF
(其中
s
的缩写
)将为您执行此操作。但这并不直接适用于乘法/除法。