Eclipse喜欢使用equals
检查生成null
方法(对于没有超类的类):
if ( null == obj )
return false;
但是,我喜欢
if ( obj == null )
return false;
更多,因为它更具可读性。 (这种情况一直让我感到不安。)
问:
为什么Eclipse在null
之前使用obj
生成它,因为if ( null == obj )
是源于C / C ++的过时实践,如此处所述?:
(obj == null) vs (null == obj)?
两者之间是否存在(运行时)差异?我只能推测......
更新
Eclipse Kepler似乎生成if ( obj == null )
,因此这仅适用于以前的Eclipse版本。
之前的课程:
public class Burp
{
private Long id ;
public Burp()
{
// test
}
}
课后:
public class Burp
{
private Long id ;
public Burp()
{
// test
}
// hashCode() omitted
@Override
public boolean equals( Object obj )
{
if ( this == obj )
return true;
if ( obj == null )
return false;
if ( getClass() != obj.getClass() )
return false;
Burp other = ( Burp ) obj;
if ( this.id == null )
{
if ( other.id != null )
return false;
}
else if ( !this.id.equals( other.id ) )
return false;
return true;
}
}
我认为我们已经为我们的前开普勒生成的equals
方法做了一些清理工作。
答案 0 :(得分:4)
有人写null == obj
代替obj == null
,因为输入=
而非==
没有风险,但它不会改变代码的工作方式。请记住,在Java中,当obj为obj = null
时,只能编写Boolean
(没有错误)。这种编写代码的方式来自其他编程语言,比如C语言,它错误地写obj = null
是完全有效的。
答案 1 :(得分:3)
您可以修改模板以在Eclipse中生成equals方法,请参阅以下link
就两者之间的运行时差异而言,我认为两个表达式应该是相同的,因为编译器会以类似的方式优化两个空检查表达式(即将生成相同的字节码)。它更多地涉及人们喜欢使用的惯例,并且因人而异。
答案 2 :(得分:2)
没有区别,Java中的约定(如果我们假设JDK是一个引用)是使用if (obj == null)
。例如,请参阅Objects#requireNonNull
的代码:
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new NullPointerException();
return obj;
}
对于它的价值,Netbeans使用equals
自动生成if (obj == null) return false;
。
无论你使用哪个都不会在运行时产生差异并产生相同的字节码。
答案 3 :(得分:1)
也有些人喜欢Master Yoda风格,你比较常数然后变量
如果(5 == i) - 尤达风格