【发布时间】:2017-09-11 14:46:23
【问题描述】:
考虑:
class Dog{
int height;
int weight;
String name;
}
public class DogTest {
public static void main(String[] args) {
Dog one = new Dog();
one.height=4;
one.name="fudo";
one.weight =2;
Dog two = new Dog();
two.height=4;
two.name="fudo";
two.weight =2;
if (one.equals(two)){
System.out.println("True");
}
else{
System.out.println("False");
}
}
}
为什么会输出“False”?如果默认情况下在 Java 中“所有对象都不相等,即使它们具有相同的值”,那么我如何“说服”Java 这两个对象实际上是相等的?
好吧,即使两只狗的名字、身高、体重相同,一只可能是斑点狗,另一只可能是斗牛犬,即使它们是同一个“种族”,从本质上讲,它们总是可以彼此不同。
PS:我知道通过说 if (one==two) {} 我们是在比较它们是否都引用堆上的同一个对象,.equals on string 比较它们是否以相同的顺序具有相同的字符。
【问题讨论】:
-
如果你不覆盖等于,我会很难工作......
-
@Harald 那不一样。这就是为什么某些字符串
==可以工作而其他字符串不能工作的原因。