Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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中内置的equals方法_Java - Fatal编程技术网

Java中内置的equals方法

Java中内置的equals方法,java,Java,我有以下Java代码: class Complex { private double re, im; public Complex(double re, double im) { this.re = re; this.im = im; } } public class Main { public static void main(String[] args) { Complex c1 = new Complex

我有以下Java代码:

class Complex {
    private double re, im;

    public Complex(double re, double im) {
        this.re = re;
        this.im = im;
    }
}


public class Main {
    public static void main(String[] args) {
        Complex c1 = new Complex(10, 15);
        Complex c2 = new Complex(10, 15);
        if (c1.equals(c2)) {
            System.out.println("Equal ");
        }
        else 
        {
            System.out.println("Not Equal ");
        }
    }
}
我的问题: 为什么这个程序输出Not Equal?因此内置的equals方法用于内容比较,而不用于地址比较,如==运算符。
tnx很多:)

如果您没有重写类中的equals()方法,它会引用基类“Object”中的equals方法。
对象类中equals的默认实现是对象引用(地址)的浅层比较。

您没有在类中重写
equals
。您所说的“内置”是什么意思?继承自
Object
class的方法?因此,如果我不重写equals方法,它不应该比较对象的内容?如果不重写它,则使用Object方法:
return(this==obj)文档:“类对象的equals方法在对象上实现了最有区别的等价关系;也就是说,对于任何非空引用值x和y,当且仅当x和y引用同一对象时,此方法才返回true(x==y的值为true)。”因此,您的意思是,在本例中,非重写的equals方法和==运算符之间没有区别?这就是
对象所做的。equals(Object)
这样做,如果您不重写它,它将只使用
=
。您可以看到对
=
的简单委托。需要注意的一个区别是,如果第一个对象是
null
,那么
equals
将抛出一个NPE。但是是的,如果你想要一个有用的
等于
,你应该重写它。