【问题标题】:Can't find null value for: Exception in thread "main" java.lang.NullPointerException (solved, caused by Boolean vs boolean) [duplicate]找不到空值:线程“main”java.lang.NullPointerException中的异常(已解决,由布尔值与布尔值引起)[重复]
【发布时间】:2017-10-19 19:52:24
【问题描述】:

请帮助找出 IntelliJ 给出 NullPointerException 的原因。

线程“main”中的异常 java.lang.NullPointerException at ex3.Horse.about(Horse.java:16) 在 ex3.Horse.ride(Horse.java:21) 在 ex3.Hippodrome.main(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();
        }
    }
}

【问题讨论】:

  • @JuanCarlosMendoza 我想他知道它是什么,问题在于它发生在哪里:p
  • @ACVM 正确:p

标签: java exception nullpointerexception


【解决方案1】:

Boolean 是一个类,相对于原始类型boolean,当用作字段时,其默认值为null 而不是false

这就是为什么isMale会在String sex = (isMale) ? "Male" : "Female";线上抛出一个NPE

正如@ACVM 所说:您可以通过将isMale 初始化为false 或将其类型更改为boolean 来解决此问题

【讨论】:

  • 很好,在这种情况下,代码可能应该使用boolean 原始类型
  • 非常感谢!作为新手,这让我花了几个小时试图弄清楚。
  • @AlexK 不客气,如果我的回答解决了您的问题,您可以随时将其标记为已接受
猜你喜欢
  • 1970-01-01
  • 2017-04-08
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多