Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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 7';s Objects.equals是否比较字段?_Java_Performance - Fatal编程技术网

使用Java 7';s Objects.equals是否比较字段?

使用Java 7';s Objects.equals是否比较字段?,java,performance,Java,Performance,我刚刚生成了一些equals方法,我想知道是否应该使用Objects.equals()方法将字段与Java7进行比较 Eclipse生成如下等式: public class A { private String a; private String b; @Override public boolean equals(Object obj) { if(this == obj) return true;

我刚刚生成了一些equals方法,我想知道是否应该使用Objects.equals()方法将字段与Java7进行比较

Eclipse生成如下等式:

public class A
{
    private String a;
    private String b;

    @Override
    public boolean equals(Object obj)
    {
        if(this == obj)
            return true;
        if(obj == null)
            return false;
        if(getClass() != obj.getClass())
            return false;
        A other = (A)obj;
        if(a == null)
        {
            if(other.a != null)
                return false;
        }
        else if(!a.equals(other.a))
            return false;
        if(b == null)
        {
            if(other.b != null)
                return false;
        }
        else if(!b.equals(other.b))
            return false;
        return true;
    }
}
我想知道,这是否是一个好的做法:

public class A
{
    private String a;
    private String b;

    @Override
    public boolean equals(Object obj)
    {
        if(this == obj)
            return true;
        if(obj == null)
            return false;
        if(getClass() != obj.getClass())
            return false;
        A other = (A)obj;
        return Objects.equals(a, other.a) && Objects.equals(b, other.b);
    }
}

你觉得怎么样?我试图测试它的性能,但没有显示出任何差异。

是的,这是一个很好的实践。通过这种方式,
equals
方法看起来更加清晰,没有任何缺点,除了附加的方法调用,在大多数情况下,JIT编译器可以轻松地内联这些方法调用。请注意
Objects.equals
首先出现在Java7中,而不是Java8中。

还要注意
Objects.hashcode(T…obj)
是对它的一个很好的补充。是的,当覆盖
equals
时,您应该始终实现
hashCode