无法找到以下值的空值:线程“main”中的异常java.lang.NullPointerException(解决,由布尔值与布尔值引起)
请帮忙弄清楚为什么IntelliJ会给出NullPointerException。无法找到以下值的空值:线程“main”中的异常java.lang.NullPointerException(解决,由布尔值与布尔值引起)
在在 ex3.Hippodrome ex3.Horse.about(Horse.java:16)在ex3.Horse.ride(Horse.java:21)在线程 “主” 显示java.lang.NullPointerException异常。主(Hippodrome.java:19)
班马:
package ex3;
public class Horse {
String name;
int speed;
String color;
Boolean isMale;
int age;
void eat(){
System.out.println("eating ... ");
}
void about(){
String sex = (isMale) ? "Male" : "Female"; // тернарный оператор
System.out.printf("name: %s, age: %d, sex: %s", name, age, sex);
}
void ride(){
about();
System.out.println("riding at speed: " + speed);
}
}
和类竞技场:
package ex3;
import java.util.Random;
public class Hippodrome {
public static void main(String[] args) {
Horse[] horses = new Horse[10];
Random random = new Random();
for (int i = 0; i < horses.length; i++) {
horses[i] = new Horse();
horses[i].name = "Kon " + i;
horses[i].age = 1 + random.nextInt(10);
}
for (Horse horse : horses) {
horse.ride();
}
}
}
Boolean
是一类,与原始类型boolean
相反,当用作字段时,其默认值为null
而不是false
。
这就是为什么isMale
将抛出就行了NPE String sex = (isMale) ? "Male" : "Female";
由于@ACVM注意:您可以通过初始化isMale
到false
或改变其类型boolean
好的catch,在这种情况下代码应该使用'boolean'基本类型 – ACVM
非常感谢!新的这给了我几个小时试图找出它。 –
@AlexK不客气,如果我的答案解决了您的问题,您可以随时将其标记为已接受 –
@JuanCarlosMendoza解决这个问题,我认为他知道是什么是,问题是搞清楚它发生的地方:p – ACVM
@ACVM正确:p –