繁体   English   中英

Java Integer.MAX_VALUE和Integer.MIN_VALUE

[英]Java Integer.MAX_VALUE and Integer.MIN_VALUE

以下代码

BigInteger number=new BigInteger("2154789654785210095153123254756845");
boolean b=number.longValue()>Long.MIN_VALUE;
boolean c=number.longValue()<Long.MAX_VALUE;
boolean d=number.longValue()>=Integer.MIN_VALUE;
boolean e=number.longValue()<=Integer.MAX_VALUE;
System.out.println(""+b);
System.out.println(""+c);
System.out.println(""+d);
System.out.println(""+e);

生成输出

true
true
false
true

请记住,在Integer中实现MAX_VALUE后,值会返回MIN_VALUE并再次循环,如果值<=Integer.MAX_VALUE ,那么它必须>=Integer.MIN_VALUE ,那么为什么布尔变量d返回false

一旦我们了解了longValue()返回的内容,就可以解释这longValue()

将此BigInteger转换为long。 这种转换类似于Java *语言规范5.1.3节中定义的从long到int的缩小原语转换:如果这个BigInteger太大而不适合长,只返回低位64位。 请注意,此转换可能会丢失有关BigInteger值的总体大小的信息,并返回具有相反符号的结果。

打印此变量的值会产生-4694333933485660691 ,这个值肯定是合法的long值但远小于Integer.MIN_VALUE (这里隐式转换为long ),因此false对于d打印输出是正确的。

bc输出都为true因为值-4694333933485660691大于Long.MIN_VALUE ,因为值-4694333933485660691小于Long.MAX_VALUE 对于bc打印false的唯一值是那些在longValue()时将分别转换为Long.MIN_VALUELong.MAX_VALUE BigInteger

通过如下打印值可以很容易地理解它

number.longValue()[-4694333933485660691]>Long.MIN_VALUE[-9223372036854775808  =  true
number.longValue()[-4694333933485660691]<Long.MAX_VALUE[9223372036854775807  =  true
number.longValue()[-4694333933485660691]>=Integer.MIN_VALUE[-9223372036854775808  =  false
number.longValue()[-4694333933485660691]<=Integer.MAX_VALUE[9223372036854775807  =  true

希望这可以帮助

从Java 1.8开始,您可以使用BigInteger.longValueExact() ,如果BigInteger值无法精确表示为long值,则会抛出ArithmeticException

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM