Java简单题,为什么这两个输出都是false

class Number {
int i;
}

public class EqualsMethod {

public static void main(String[] args) {

Number n1 = new Number (); n1.i=47;
Number n2 = new Number (); n2.i=47;

System.out.println( n1 ==n2 );
System.out.println(n1.equals(n2));
}
}

equals适用于比较“基本数据类型" ----我笑了 这句是错的
equals是比较引用类型的,之所以是false 原因是这样的

== 比较的是引用 你new了2次 明显 引用不一样 可以理解为地址

因为你的类Number是直接继承Object的 而且你没有覆盖equals方法

所以当你调用n1.equals(n2)的时候 会去调用父类的

而Object中equals默认的代码如下
public boolean equals(Object obj) {
return (this == obj);
}
所以输出的是false

所以对引用类型比较 应该覆盖equals方法 后使用
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-06
n1.tostring().equals(n2.tostring()) 这样比较的话才会是true。

因为==号会比较内存地址。
你的n1和n2都是new出来的,所以内存地址肯定不一样。
equals 方法(是String类从它的超类Object中继承的)被用来检测两个对象是否相等,即两个对象的内容是否相等,区分大小写。

==用于比较引用和比较基本数据类型时具有不同的功能:
比较基本数据类型,如果两个值相同,则结果为true
而在比较引用时,如果引用指向内存中的同一对象,结果为true