空检查+取消引用在同一行

Null check + dereference on the same line

在同一行检查 null 和取消引用是否有任何危险?

如果 myObj 实际上为 null,此代码将如何运行?

不同语言处理此类情况的方式是否存在差异(即 C# 与 Java)

例如,如下所示

if(myObj != null && myObj.someProp == "Test")
{
  //...
}

&& 短路 所以如果 myObj 确实为 null 那么第二个条件将永远不会被评估。

此行为对于 C#Java 都是相同的。

在您的示例中,if 条件需要布尔运算提供的布尔值 myObj != null && myObj.someProp == "Test"

当使用 && 运算符时,首先检查左操作数。如果它的值等于 true 则检查正确的操作数,因为不可能提前知道它的状态。但是如果它的值等于 false 那么就不需要检查正确的操作数,因为无论正确的条件状态是什么,整个操作都会导致 false. 这就是它安全的原因。

但是当使用 & 运算符时,两个操作数总是被检查。使用 & 运算符,您的示例如下所示:

if(myObj != null & myObj.someProp == "Test")
{
  //...
}

这样做,当 myObj 变量等于 null 时,上面的代码将失败。在这种情况下,您的代码将不安全。

希望对您有所帮助;