如何检查布尔变量的null条件

时间:2013-03-04 11:30:27

标签: java

我有一个如图所示的课程

package com;

public class Person {
boolean registered;

public boolean isRegistered() {
    return registered;
}

public void setRegistered(boolean registered) {
    this.registered = registered;
}
}

将根据DB中的数据设置数据到人物对象。 问题是对于较旧的记录,注册的文件不存在。

所以我怎么能测试该档案是否存在?

package com;

public class Test {

    public static void main(String args[]) {
        Person per = new Person();

        if (per.isRegistered()) {

        }
    }

}

如何检查该Person对象是否存在per.isRegistered()字段?

10 个答案:

答案 0 :(得分:6)

当前定义Person类的方式是不可能的,因为boolean(基本类型)没有null值,只有true和{{ 1}}。

可以使用false(等效对象),可以是BooleannullBoolean.TRUE

但更有可能你想在更深层次上解决这个问题。您已经说过,您的数据库中没有此字段不存在的数据。这些记录是否已注册?你的班级应该反映这个问题的答案。

答案 1 :(得分:5)

boolean是原始数据类型,不能为空,只能为true或false。但Boolean对象是布尔数据类型的说唱者,它可以为空Boolean.TRUEBoolean.FALSE;

public class Person {
    Boolean registered;
    ...
}

...

Person per = new Person();

if (per.isRegistered()!=null ) {
    if(!per.isRegistered()){
         ...
    }else{
         ...
    }
}

答案 2 :(得分:3)

boolean 不能null;您需要使用(Boolean)或构建复合类型。

答案 3 :(得分:1)

您可以使用Boolean(大写B)类,该类允许NULL类型的参考值。

或者,您可以使用具有三个可能值的enumNOT_AVAILABLEYESNO。这有一个更清晰的语义,允许您稍后添加其他可能的值(如果需要)。

答案 4 :(得分:1)

你需要一个三态布尔值;真实,虚假而不存在。

您可以使用布尔类而不是基元布尔值来实现此目的,并使用null作为“not there”指示符。

答案 5 :(得分:1)

我真的不明白你的想法。但是如果你想处理一个布尔值,它的值可以是以下{true / false / null}之一,你应该使用一个Boolean对象,它是一个简单的boolean包装器,但它可以采用null值(因为每个Java对象都可以设置为null)。

答案 6 :(得分:1)

您应该使用Optional

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class MapDemo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        Map<String, Integer> map = new HashMap<>();
        System.out.println("Elemment number: ");
        String sNum = input.nextLine();
        int iNum = Integer.parseInt(sNum);
        for (int i = 0; i < iNum; i++) {
            System.out.println("Key: ");
            String sKey = input.nextLine();
            System.out.println("Value: ");
            String sValue = input.nextLine();
            int iValue = Integer.parseInt(sValue);
            map.put(sKey, iValue);
        }
    }
}

答案 7 :(得分:0)

boolean registered字段默认为false。此外booleanObject类无关但与原始值无关,因此根本不能null

pernull

时,您可能只有一个空指针

答案 8 :(得分:0)

使列可以为空并使用布尔值而不是布尔值。但是对于特定问题,我认为您可以假设如果它为null,则用户未注册。

答案 9 :(得分:0)

您必须扩展person类才能在测试类中使用它。 您还必须定义布尔值。