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