好吧也许我只是累了因为这个但我怎么能做到这一点?
int x = Integer.MAX_VALUE+10;
//或者
int x = Integer.MIN_VALUE-20;
我只想要if语句来捕获x是否在“范围内”有点像这样:
if(x >= Intefer.MAX_VALUE || x <= Integer.MIN_VALUE){ //throw exception}
但问题是,如果值如上所述,如MAX_VALUE + 10,则该值最终既不高于MAX VALUE也不低于MIN_VALUE并且不满足if条件... < / p>
编辑:澄清我的意思: 我不想实际存储任何大于最大/最小值的值。 想象一下:
一个字段,你写10 + 10,它说“好吧,那是20” 接下来,有人可能会写1000000 * 100000,它也会回答答案 但是有人可能会写出一些超过最大/最小值的东西,例如10000000 * 1000000 * 1000000或类似的东西,然后程序应该都像是“撑起来,那太高了!这里的”0“对你而言”
答案 0 :(得分:6)
这可以通过两种方式解决:
第一种方式:
if(x + 10 <= x){ //Has wrapped arround so throw exception}
第二种方式(更好):
long x = Integer.MAX_VALUE+10L;
现在条件正常工作
if(x >= Integer.MAX_VALUE){ //throw exception}
答案 1 :(得分:5)
如果您需要表示大于或小于限制的整数,请使用long
代替int
个变量。另一方面,如果您真的担心包含大于int
的值的Integer.MAX_VALUE
变量,那么请不要担心 - 这样的事情不可能存在。当值存储在int
中时,任何溢出或下溢都已发生。
答案 2 :(得分:1)
以前提供的所有解决方案的问题在于,他们都建议将广播投射到尺寸较大的图元来执行计算(例如使用long
代替int
)。< / p>
这种方法有点沉重,当你已经使用了最大的原语时就会失败。相反,您可以在执行操作之前检查操作(例如加法或减法)是否会溢出。
这是来自The CERT Oracle Secure Coding Standard for Java的函数,它还为其他数学运算符提供等效函数,例如减法。
static final int safeAdd(int left, int right) throws ArithmeticException {
if (right > 0 ? left > Integer.MAX_VALUE - right
: left < Integer.MIN_VALUE - right) {
throw new ArithmeticException("Integer overflow");
}
return left + right;
}
答案 3 :(得分:0)
Integer.MAX_VALUE
和MIN_VALUE
是带有int
的最大/最小值可表示。这就是重点:您不能拥有价值更低或更高的int
。
如果您希望持有并测试较小或较大的值,则需要使用long
。
当您尝试添加到例如Integer.MAX_VALUE
并将结果保存在int
中,变量将overflow,结果将保持在MAX_VALUE
和MIN_VALUE
之间的值。