Java 在这种情况下,为什么在将null添加到列表并对其排序时没有得到null指针异常

Java 在这种情况下,为什么在将null添加到列表并对其排序时没有得到null指针异常,java,nullpointerexception,Java,Nullpointerexception,每当我把条件改为i==2或i==3时,我总是得到NPE,但不是在5的情况下为什么? 我没有更多的细节要补充,我想这个问题是不言自明的 import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; public class Test{ public static void main(String args[]) throws Excepti

每当我把条件改为i==2或i==3时,我总是得到NPE,但不是在5的情况下为什么? 我没有更多的细节要补充,我想这个问题是不言自明的

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;

public class Test{
    public static void main(String args[]) throws Exception{
        List<X> arr=new ArrayList<X>();
        for(int i=0;i<5;i++){
        arr.add(new X(i));
        if(i==5){
            arr.add(null);
        }
        }

        Collections.sort(arr);
        for(X x:arr){
            System.out.println(x.i);
        }
    }

}

class X implements Comparable{
    public int i;
    public X(int i2) {
        i=i2;
    }
    @Override
    public int compareTo(Object o) {
        return new Random().nextInt(10)-5;
    }

}
import java.util.ArrayList;
导入java.util.Collections;
导入java.util.List;
导入java.util.Random;
公开课考试{
公共静态void main(字符串args[])引发异常{
List arr=new ArrayList();

对于(int i=0;i,对于
i
,循环只会转到4,因此当您将条件更改为
i==5
时,不会插入任何内容

if(i==5){
    arr.add(null);
}

永远不会执行,因为循环是从0到4。(
for(int i=0;i这是因为for循环实际上从未上升到5:

for(int i=0;i<5;i++)

for(int i=0;i您的循环在
i==5之前退出。查看您的for循环:

for( i = 0; i < 5; i++)
(i=0;i<5;i++)的


这意味着,在迭代循环之前,它会检查条件
i<5
是否为真。如果为真,则循环将运行。之后,i将递增1,并再次进行检查。当i等于5时,检查将失败,因为5不小于5。因此,if语句中的行永远不会运行,并且会出现空指针异常oided.

“我没有更多的细节要补充,这个问题是不言自明的,我想”那句话的建设性目的是什么?来吧。循环只在
I<5
时运行。因此
I=5
不可能发生。调试器-名词(1)一种软件工具,允许在运行时检查编译后的程序,并具有以下功能:逐语句执行代码、检查变量、设置断点以及其他理解程序流和行为的方法。Downvoter:您对这个答案进行downvoting有什么可能的理由?@T.J.Crowder我想您是对的。我认为排序不会有问题,因为compareTo根本不访问对象,但是在null实例上调用compareTo会导致NullPointerException。当在null对象上调用compareTo时,排序时会发生NPE