Java 我怎么知道';长';值已达到Long.MAX_值

Java 我怎么知道';长';值已达到Long.MAX_值,java,android,genetic-algorithm,Java,Android,Genetic Algorithm,下面是我的代码,但是if语句不起作用 int i = 0; while (true) { long l = fibonacci(i++); if (l < 0L && l > Long.MAX_VALUE) { System.out.println("over"); break; } inti=0; while(true){ 长l=斐波那契(i++); 如果(lLong.MAX_值){ 系统输出打印项次(“结束”); 打破 } } 如何知道

下面是我的代码,但是
if
语句不起作用

int i = 0;
while (true) {
  long l = fibonacci(i++);
  if (l < 0L && l > Long.MAX_VALUE) {
    System.out.println("over");
    break;
}
inti=0;
while(true){
长l=斐波那契(i++);
如果(l<0L&&l>Long.MAX_值){
系统输出打印项次(“结束”);
打破
}
}


如何知道
long
值是否已达到
long.MAX_值

如果
long
值超出了
long
的界限,则会发生溢出。由于此溢出,下一个斐波那契数将显示为负数。所以检查小于零的数字是正确的。但是您不需要检查它是否大于
Long.MAX\u值
,因为没有
Long
可以满足该条件。
&&
是另一个错误;一个数字不能同时小于零和大于那个(任何)正数

你只需要:

if (l < 0L) {
if(l<0L){

L永远不能大于Long.MAX\u值。
L>Long.MAX\u值
您应该仔细看一下这个条件。非常感谢,您的答案是正确的。如果1<0L&&L>Long.MAX\u值返回false,则此语句为“L<0L&&L>Long.MAX\u值”返回false?@wyf是的,您的原始条件将始终返回
false
,而不仅仅是如果它超过了
Long.MAX\u值
。我怀疑
l<0L
是否保证会溢出,但确实如此。我执行了Long.MAX\u值+Long.MAX\u值并得到了-2,所以您无法溢出到目前为止再加一次正数。当然,如果在每次加法之间进行溢出检查。