以下代码
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);
Run Code Online (Sandbox Code Playgroud)
生成输出
true
true
false
true
Run Code Online (Sandbox Code Playgroud)
请记住,MAX_VALUE在Integer中实现之后,值会返回MIN_VALUE并再次循环,如果值为<=Integer.MAX_VALUE,那么它必须是>=Integer.MIN_VALUE,那么为什么布尔变量会d返回false?
rge*_*man 12
一旦我们理解了longValue()返回的内容,就可以解释这一点.
将此BigInteger转换为long.这种转换类似于Java*语言规范5.1.3节中定义的从long到int的缩小原语转换:如果这个BigInteger太大而不适合长,只返回低位64位.请注意,此转换可能会丢失有关BigInteger值的总体大小的信息,并返回具有相反符号的结果.
打印此变量-4694333933485660691的值会产生一个值,该值肯定是合法long值但远小于Integer.MIN_VALUE(隐式转换为long此处),因此打印输出false正确d.
两个b和c输出是true因为该值-4694333933485660691大于Long.MIN_VALUE,并且因为该值-4694333933485660691是小于Long.MAX_VALUE.这将打印的唯一值false的b和c是那些BigInteger将转化成S Long.MIN_VALUE和Long.MAX_VALUE自己分别的时候longValue()被调用.