Eclipse生成equals方法:if(obj == null)vs if(null == obj)

时间:2014-05-14 14:04:36

标签: java eclipse code-generation equals

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方法做了一些清理工作。

4 个答案:

答案 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) - 尤达风格