提问人:rhian 提问时间:5/2/2022 最后编辑:rhian 更新时间:5/3/2022 访问量:55
仅当字符串包含至少一个字符时才打印出字符串,这引起了混淆
Printing out a string only if it contains at least one character question confusion
问:
我卡住了这个问题:
答案是版本 3,但我不确定为什么。我尝试使用分配了 null 的测试字符串对其进行测试,这是我使用的版本 2:
String str = null;
if (str != null || !str.equals("")){
System.out.println(str);
}
它给了我一个空指针异常,除了版本 3 之外,我真的很困惑。
答:
必须检查 -statements 中的条件。因此,如果您的 -语句中有,那么您将检查并检查第一个语句是否是 .假设字符串是 .第一个条件是,第二个条件尝试检查。然后你会得到一个 NullPointerException,因为你无法与字符串进行比较。if
str != null || !str.equals("")
if
str != null
!str.equals("")
false
null
false
!str.equals("")
null
但是,如果使用 ,则将首先检查,并且仅当第一个语句是 时才会检查第二个语句。这意味着,如果字符串是 .因此,您永远不会收到 NullPointerException。str != null && !str.equals("")
str != null
!str.equals("")
true
!str.equals("")
null
你不能使用,因为没有等于方法。通过使用 You 检查字符串的引用。所有内容都具有相同的引用,因此,如果您的字符串是 ,那么它将指向引用,并可用于检查该引用。str.equals("")
null
==
null
null
null
==
评论
如果对 null String 执行任何操作,则会给出 null 指针异常。( Here you are comparing it with !str.equals(""))
另一点需要注意的是: 在 ||条件,如果第一个条件为真,则不会计算第二个条件。
而在&&中,如果第一个条件为假,则不计算第二个条件。
出于这个原因, 这两者都称为短路算子。
评论
&&
||
null
&&
||