Java 在这种情况下,为什么在将null添加到列表并对其排序时没有得到null指针异常
每当我把条件改为i==2或i==3时,我总是得到NPE,但不是在5的情况下为什么? 我没有更多的细节要补充,我想这个问题是不言自明的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
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