为了账号安全,请及时绑定邮箱和手机立即绑定

为什么重写了equals()两类的对象还是不相等

public class phone1 {
	int size = 1;

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + size;
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		phone1 other = (phone1) obj;
		if (size != other.size)
			return false;
		return true;
	}

}
public class phone2 {
	int size = 1;
}
public class PHONE {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		phone1 p1 = new phone1();
		phone2 p2 = new phone2();

		if(p1.equals(p2))
		{
			System.out.println("两个电脑的参数相同!");
		}
		else
		{
			System.out.println("两个电脑的参数不同!");
		}
	}
}

结果是  两个电脑的参数不同!

正在回答

4 回答

 phone1 p1 = new phone1();

 phone2 p2 = new phone2();

是分别用两个类指向了两个对象,equals的用法是用来比较同一个类的两个对象,所以你的main函数应该改成如下,你再去运行就是相同了

public class PHONE {

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        phone1 p1 = new phone1();

        phone1 p2 = new phone1();

 

        if(p1.equals(p2))

        {

            System.out.println("两个电脑的参数相同!");

        }

        else

        {

            System.out.println("两个电脑的参数不同!");

        }

    }

}


2 回复 有任何疑惑可以回复我~
#1

慕粉4034825 提问者

那是怎么比较两个对象的,好像你上面那样,那两个对象不是都是指同一个类吗,那比较有什么意义?
2017-07-28 回复 有任何疑惑可以回复我~
#2

诸葛亮剑 回复 慕粉4034825 提问者

虽然是同一个类的,但是这个类中的两个对象是不同的,就是你给这两个对象赋的值是不同的也可能是相同的(由你来决定),就像该节教学视频讲的一样,equals的用法是用来比较同一个类的两个对象,虽然他并没有明确的说,但是equals就是这样使用的
2017-07-28 回复 有任何疑惑可以回复我~
#3

慕粉4034825 提问者

非常感谢!
2017-07-29 回复 有任何疑惑可以回复我~
#4

慕婉清7557668 回复 慕粉4034825 提问者

你这个重写的equals的函数是用来比较size的值。比如有一个学生类,然后定义了两个学生对象,一个叫TOM,一个叫KATE,用size来表示他们的年龄,那么p1.equals(p2)的含义就是比较TOM和KATE的年龄是否相同了。
2017-07-31 回复 有任何疑惑可以回复我~
查看1条回复

参数要toString,不然参数输出的是在内存中的地址,而不是参数的值


0 回复 有任何疑惑可以回复我~

你这个只比较了对象,没有比较size诶,你看看把多余的代码注释掉看看

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么重写了equals()两类的对象还是不相等

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信