1、请问为什么 aCat.equals(bCat) 输出false f1.equals(f2) 输出true 是因为float类把equals重写了吗? 2、请问equals和==的区别?

img


1、请问为什么
aCat.equals(bCat) 输出false
f1.equals(f2) 输出true
是因为float类把equals重写了吗?
2、请问equals和==的区别?

aCat.equals(bCat) cat是一个对象,所以这段是比较两个对象是否相等(比较【对象】是否相等Java比较的是内存地址是否相等),你没有重写equals,所以调用的是Object的equals方法。
public boolean equals(Object obj) {
return (this == obj);
}
两个对象都是new出来的,内存地址不同 返回false。

f1.equals(f2)
Float是基本类型float的封装类,基本类型的封装类都会重写hashcode和equals,重写equals去比较数值是否相等。
public boolean equals(Object obj) {
return (obj instanceof Float)
&& (floatToIntBits(((Float)obj).value) == floatToIntBits(value));
}
所以f1和f2值相等 返回true

你自己创见的类如果没有重写equals方法,那么默认调用object的equals方法,而object的equals实现是==。
也就是比的地址。
两个new出来的类而盎然地址不一样。
至于float,它里面重写了equals方法,比的是真正的数值。

百度1s答案

百度1s答案