是= = null? brach1:branch2 - 在java中不是懒惰的评估?

时间:2014-01-03 15:59:38

标签: java syntax

如何从这行代码中获取空指针异常?

String a = "localUri: "+  mCurrentImageUri == null? "none" : mCurrentImageUri.toString();

mCurrentImageUri == null,但我认为如果是这样的话,就不会评估mCurrentImageUri.toString()

半相关:

如何编写类似于这个c#语法?

字符串a = myVar?? "none"

3 个答案:

答案 0 :(得分:13)

你需要括号:

"localUri: " + (mCurrentImageUri == null ? "none" : mCurrentImageUri.toString())

没有括号,它被解析为(("localUri: "+ mCurrentImageUri) == null) ? ...,它总是错误的。

答案 1 :(得分:2)

对于Java代码,正如其他人所指出的那样,
你用Java编写的内容相当于:

String a = ("localUri: " +  mCurrentImageUri == null ) ? "none" : mCurrentImageUri.toString();

这就是你得到NullPointerException(NPE)的原因。

在C#中你可以做到:

myVar == null ? "none" : myVar.ToString()

语法与Java相似 (在Java中你有toString(),在C#中你有ToString())

在C#中,正如您的建议,您也可以使用
左合并算子。有关详细信息,请点击此处:

http://msdn.microsoft.com/en-us/library/ms173224.aspx

答案 2 :(得分:1)

  

如何从这行代码中获取空指针异常?

如果查看表运算符优先级+的优先级高于三元运算符,那么首先连接字符串然后它不为空,这样你就进入第二个条件。