Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这会创建NullPointerException吗?如果不会,为什么不会?_Java_Nullpointerexception - Fatal编程技术网

Java 这会创建NullPointerException吗?如果不会,为什么不会?

Java 这会创建NullPointerException吗?如果不会,为什么不会?,java,nullpointerexception,Java,Nullpointerexception,我有下面几行代码 String name = null; if (something) name = someString; if (name != null && name.equals("XYZ")) doSomethingWith ("hello"); 如果“something”为false,上述if条件是否会导致NullPointerException? 如果不是,为什么不呢?不,不会。Java中的&&运算符是一个运算符,因此,如果name为null,则

我有下面几行代码

String name = null;
if (something)
    name = someString;
if (name != null && name.equals("XYZ"))
    doSomethingWith ("hello");
如果“something”为false,上述if条件是否会导致NullPointerException?
如果不是,为什么不呢?

不,不会。Java中的
&&
运算符是一个运算符,因此,如果
name
null
,则不会执行
name.equals()
(因为
false&&anything
仍然是
false


顺便说一下,与
|
相同:如果左侧的计算结果为
true
,则不会选中右侧。

不,不会。Java中的
&&
运算符是一个运算符,因此,如果
name
null
,则不会执行
name.equals()
(因为
false&&anything
仍然是
false


顺便说一句,与
|
相同:如果左侧的计算结果为
true
,则不会选中右侧。

不,不会。只有当&&operator的左侧为true时,才会执行&&operator的右侧


类似地,对于| |运算符,如果左侧为真,则不会执行右侧。

不,不会。只有当&&operator的左侧为true时,才会执行&&operator的右侧


类似地,对于| |运算符,如果左侧为true,则不会执行右侧。

否,它不会导致NullPointerException,因为
if
语句是如何编写的。你有:

if ( name != null && name.equals("XYZ")) {
    //do stuff...
}

if
语句中的条件从左到右进行计算。因此,如果
name
为空,则
name!=null
条件求值为
false
,由于
false&&避免执行不会影响
if
语句结果的代码,而且恰好也阻止示例代码生成NullPointerException。

否,它不会导致NullPointerException,因为
if
语句是如何编写的。你有:

if ( name != null && name.equals("XYZ")) {
    //do stuff...
}

if
语句中的条件从左到右进行计算。因此,如果
name
为空,则
name!=null
条件求值为
false
,由于
false&&避免执行不会影响
if
语句结果的代码,而且恰好也阻止示例代码生成NullPointerException。

只是好奇,所谓短路求值的反面是什么?有没有其他语言可以实现这样的行为,上面提到的问题可能会引发NPE?维基百科上说“渴望评估”(遵循我给出的链接),但我从来没有听说过这个词。我会说“贪婪”,因为这是正则表达式中用于获取最大匹配而不是最短匹配的术语。看起来是Fortran做的,Pascal可能会做。VisualBasic变体也不会短路,尽管它们似乎提供了一种实现短路的方法。我见过一些实例,它们将其称为非短路运算符:)或长电路。实际上,由于它来自电的世界,也许我们应该称之为全电路运算符。@Dirk:如果使用二进制运算符
&
,它在Java中也可以工作。他们是。。。非短路-全回路-渴望。只是好奇,短路评估的相反名称是什么?有没有其他语言可以实现这样的行为,上面提到的问题可能会引发NPE?维基百科上说“渴望评估”(遵循我给出的链接),但我从来没有听说过这个词。我会说“贪婪”,因为这是正则表达式中用于获取最大匹配而不是最短匹配的术语。看起来是Fortran做的,Pascal可能会做。VisualBasic变体也不会短路,尽管它们似乎提供了一种实现短路的方法。我见过一些实例,它们将其称为非短路运算符:)或长电路。实际上,由于它来自电的世界,也许我们应该称之为全电路运算符。@Dirk:如果使用二进制运算符
&
,它在Java中也可以工作。他们是。。。非短路全回路。RHS=右侧,LHS=左侧。RHS=右侧,LHS=左侧。