我想知道以下代码段的差异(w.r.t代码大小和/或性能):
if(null == someObject.getSomeProperty()){
...
}
VS
if(someObject.getSomeProperty() == null ){
...
}
答案 0 :(得分:0)
在我看来,性能和生成的字节码大小应该相同。第一个尖头样式(null == value
)来自C / C ++,其中任何不同于0的东西被认为是 true ,而等于0的东西是 false 。为避免出现问题,请以这种方式处理:null == value,然后确保这是一个条件。
由于java具有boolean类型,以这种方式处理条件是没用的,更多被认为是一种不好的做法。它被称为Yoda Condition。
在根据字面值进行验证时应使用此方法的唯一原因:
if("someValue".equals(input)) {
// do something
}
if (BigDecimal.ONE.equals(input)) {
// do something
}
如果输入是 null ,那么以自然的方式编写代码会抛出NullPointerException异常,因此条件应该写得更具防御性:
if (input != null && input.equals("someValue")) {
// do something
}
答案 1 :(得分:0)
表现没有区别。此外,在现代语言中,您不应该担心任何问题,因为编译器会为您进行优化。
写这些所谓的" yoda条件的唯一原因" (在'错误'顺序中使用比较语句)将特定值与使用equals
时可能为null的值进行比较,例如:
if("blue".equals(sky.getColor())){
//...
}
因为如果你想以直观的方式编写它,你必须进行手动空检查:
if(sky.getColor() != null && sky.getColor().equals("blue")){
//...
}