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"))