Java 返回基元类型的方法是否可能返回null?

Java 返回基元类型的方法是否可能返回null?,java,arraylist,nullpointerexception,Java,Arraylist,Nullpointerexception,我正在使用ArrayList进行练习,遇到了一些我不懂的东西。我有一个类背包和一个类物品,我正在用物品填充背包,并对背包进行各种测试 其中一个公共背包方法返回背包中非空项的总重量。另一个Knapsack方法是一个静态类方法,它返回Knapsack对象数组中最重的Knapsack 当我调用此代码测试背包中的物品是否等于1000g时: testIntEqual("heaviestKnapsack", 1000, Knapsack.heaviestKnapsack(sacks).totalWeight

我正在使用
ArrayList
进行练习,遇到了一些我不懂的东西。我有一个类
背包
和一个类
物品
,我正在用
物品
填充
背包
,并对
背包
进行各种测试

其中一个公共
背包
方法返回
背包
非空
项的总重量。另一个
Knapsack
方法是一个静态类方法,它返回
Knapsack
对象数组中最重的
Knapsack

当我调用此代码测试
背包中的物品是否等于1000g时:

testIntEqual("heaviestKnapsack", 1000, Knapsack.heaviestKnapsack(sacks).totalWeightInGrammes());
IntelliJ为调用
TotalWeightingNames()

以下是
Heavest背包()
TotalWeightInGames()
方法的实现:

public static Knapsack heaviestKnapsack(Knapsack[] knapsacks) {
    // TO DO
    if (knapsacks.length != 0) {
        Knapsack heaviest;
        int index = 0;
        while (true) {
            heaviest = knapsacks[index];
            if (heaviest == null) {
                index++;
            } else {
                break;
            }
        }
        for (Knapsack knapsack : knapsacks) {
            if (knapsack != null && (getTotalKnapsackWeight(knapsack) > getTotalKnapsackWeight(heaviest))) {
                heaviest = knapsack;
            }
        }
        return heaviest;
    }
    return null;
}

public int totalWeightInGrammes() {
    // TO DO
    if (!knapsackItems.isEmpty()) {
        int totalWeight = 0;
        for (Item i : knapsackItems) {
            if (i != null) {
                totalWeight += i.getWeightInGrammes();
            }
        }
        return totalWeight;
    }
    return 0;
}
当我在这些方法中彻底测试了
null
,并且
totalWeightInGrammes()
返回原语类型
int
时,我真的很困惑IntelliJ为什么要警告我NPE

非常感谢所有评论:)


您在
.totalweightingrames()
上有一个
NPE警告
,因为
HeavestKnapsack()
可以返回
null
,因此调用
.totalweightingrames()
将抛出
NPE

当您运行它时,它是否真的会导致NPE,或者只是IDE在抱怨?只是IDE在抱怨,它编译并运行得很好。方法
heaviestKnapsack
的NPE警告不是可以返回null吗?在方法TotalWeightInGames中,检查背包项是否为空。你确定这个项不可能为空吗?我想它必须是一个返回对象的方法,这就是为什么我感到困惑的原因。那么,我将如何“空证明”我最重的背包()方法呢?我以为我做了enough@PumpkinBreath如果该方法从未返回
null
值,那么它将是
null-proof
,您不能用其他方法执行。好了,伙计们,对不起,我看到了发生的事情。我已将该方法设置为在数组为空时返回null!真不敢相信我在这个问题上遇到了这么多麻烦……如果数组中的所有背包都为null,while循环将导致IndexOutOfBounds异常。实际上,这个循环并没有什么用处;这一切都可以在一个循环中完成。@ PumpkinBreath,如果你认为这篇文章已经结束并回答,请接受答案,如果没有评论,请给出进一步的答案。
Knapsack.heaviestKnapsack(sacks).totalWeightInGrammes()
         ^^^^                    ^^^^ 
     can return null          NPE warning