Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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 空比较_Java - Fatal编程技术网

Java 空比较

Java 空比较,java,Java,我今天看到了这段代码,想知道它们之间是否有区别 return (null==employeeName ? "": employeeName); 及 没有区别,两者在返回结果方面是相同的。但我更喜欢 return (employeeName == null ? "": employeeName); 没有区别。只是写入操作数的顺序不同。就我个人而言,我更喜欢第二个。不再喜欢了 过去,在C和C++的野生日子里,非布尔表达式在if语句中是OK的,所以没有区别,除非你犯了一个经典程序员错误,忘记了一

我今天看到了这段代码,想知道它们之间是否有区别

return (null==employeeName ? "": employeeName);


没有区别,两者在返回结果方面是相同的。但我更喜欢

return (employeeName == null ? "": employeeName); 

没有区别。只是写入操作数的顺序不同。就我个人而言,我更喜欢第二个。

不再喜欢了

过去,在C和C++的野生日子里,非布尔表达式在if语句中是OK的,所以没有区别,除非你犯了一个经典程序员错误,忘记了一个等号:

employee = null
会编译,但是

null = employee 
不会


这在Java中并不重要,因为雇员类型不是布尔类型,编译器(而不是语法)会阻止你攻击自己;但不管是谁写的,这可能是他们在写C的时候养成的习惯。

这很常见,但不一样

//This is safe against null employeeName:  
return ("".equals(employeeName) ? "": employeeName);


return (employeeName.equals("") ? "": employeeName);

两者都是相同的,没有区别。

有一个经典的编码标准,在对常量和变量或文本和变量进行任何比较时,常量/文本应该位于左侧

因此,当您想检查
状态
是否为
完成
时,建议您这样做:

if("COMPLETE".equals(status))
{
}
这里的优点是不需要对状态进行空检查。按照正常方式执行:
if(status.equals(“COMPLETES”)
将在status为null时抛出
NullPointerException

在我看来,这更像是一种编程风格。我发现,即使使用额外的空检查,常规方法也更具可读性:

if(status != null && status.equals("COMPLETES"))

不管怎样,一个好的单元测试套件都应该找到一个缺失的空检查

当然,这是Java(不是C++),您将得到一个编译器错误。Java不允许在条件中赋值。第一个不会编译,但不是因为它是赋值。这是因为赋值表达式的类型不是布尔型。如果它是一个布尔赋值,它会编译的,我知道。。我提到这在Java中并不重要,但我提出了一个历史观点。我将编辑到clarify@sje397,如果
employeeName
null
,则第二个将抛出
NullPointerException
。第一个不会。我想这就是他所说的对努尔的安全,我知道你来自哪里,但这是一个有趣的例子。在这两种情况下,语句都应该是
returnemployeename
。您对返回值的选择有点混淆了这个问题。@Nivas-我不是想比较这两个,但我在这里谈论的是第一个返回值与问题中的代码(这也是“防止空值安全”)。
if(status != null && status.equals("COMPLETES"))