Java中内置的equals方法
我有以下Java代码: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
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。但是是的,如果你想要一个有用的等于,你应该重写它。