当前位置: 首页 > 面试题库 >

如何比较布尔值?

闾丘正志
2023-03-14
问题内容

以这个为例(摘自Java regexchecker不起作用):

while(!checker) {
    matcher = pattern.matcher(number);
    if(matcher.find())
        checker = true;
    else
        year++;
}

是否.equals(false)用于检查的值是否重要Boolean checker

我知道有这是颇为相似。但是,很明显,这个问题只针对原始boolean对象,而不是对象包装器Boolean;因此,.equals()将不适用。

另外,应该Boolean以不同于其他的方式对待boolean


问题答案:

从您的评论看来,您正在寻找使用Boolean包装器类的“最佳实践” 。但是实际上 并没有
最佳实践,因为使用此类开始是一个坏主意。使用对象包装的唯一原因是在您绝对 必须的
情况下(例如使用Generics时,即将booleana
存储在a HashMap<String, Boolean>或类似物中)。使用对象包装器没有任何弊端,也有很多弊端,最值得注意的是,它使您对NullPointerExceptions开放。


是否’!’ 用于代替.equals()布尔值?

两种技术都容易受到的影响NullPointerException,因此在这方面都没有关系。在第一种情况下,Boolean将开箱将其装箱成其各自的boolean值并按常规进行比较。在第二种情况下,您从Boolean类中调用一个方法,如下所示:

html" target="_blank">public boolean equals(Object obj) {
    if (obj instanceof Boolean) {
        return value == ((Boolean)obj).booleanValue();
    }
    return false;
}

无论哪种方式,结果都是相同的。

是否使用.equals(false)检查布尔值检查器的值是否重要?

以上,没有。

次要问题:布尔值应与布尔值区别对待吗?

如果您绝对 必须 使用Boolean该类,请务必null在进行任何比较之前进行检查。例如,

Map<String, Boolean> map = new HashMap<String, Boolean>();
//...stuff to populate the Map
Boolean value = map.get("someKey");
if(value != null && value) {
    //do stuff
}

这将起作用,因为Java会短路条件评估。您也可以使用三元运算符。

boolean easyToUseValue = value != null ? value : false;

但是认真的…除非您被迫不要使用原始类型,否则请使用原始类型。



 类似资料:
  • 为什么与有不同的 ? 我正在使用Drools DSL,我必须实现一个规则: 我有这些DSL定义: 要求是以肯定的方式编写可重用的DSL语句,并具有否定它们的能力。

  • 我有一个布尔方法正在对字符串进行一些错误检查。我有一个int类常量叫“numwords”=8。我将一个字符串传递给布尔方法,在该方法中,我使用.split和.length对字符串进行单词计数。一个名为“words”的int计算字符串中的单词数。完成之后,我要执行一个if语句,比较单词和数字单词。如果它们的数目相等,则返回true,否则为false。我试过==和.等于,但都没用。有什么想法吗? 我试

  • 我正在尝试这个代码编写练习,我太迷路了! 它甚至不编译,但即使它编译了,我肯定它也不会工作。

  • 嘿,好吧,所以我在阅读Python的文档,它指出任何空字符串、列表、字典,我想它们都被称为对象(我真的不理解对象的概念:\n如果有人能向我解释,我会很高兴)。无论如何,我的问题是

  • 如何完成名为c的方法,该方法将两个和一个作为输入。如果布尔值为true,则此方法将比较前两个字符串,忽略大小写因素(大写/小写)。如果两个字符串的长度相同,则将它们视为相等的忽略大小写,并且两个字符串中的对应字符的大小写相同。 如果布尔值为false,则此方法应比较两个字符串,如果第一个字符串表示与第二个字符串相同的字符序列,则返回true,否则返回false。 注意:应该返回false 我试图使

  • 我有一个问题,比较布尔值的if语句不起作用。最后一个if语句,其中notifFlag==true,如果我将它放在那里,它就不起作用了。日志显示notifFlag设置为true,但if语句未运行。但是,如果删除notifFlag==true,则if语句将运行。 带有标志得日志: 没有标志得日志: