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

来源:9-9 Java 中的 Object 类 Ⅱ

慕粉4034825

2017-07-28 13:05

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("两个电脑的参数不同!");
		}
	}
}

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

写回答 关注

3回答

  • 慕婉清7557668
    2017-07-28 14:35:19
    已采纳

     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("两个电脑的参数不同!");

            }

        }

    }


    慕婉清755... 回复慕粉4034...

    你这个重写的equals的函数是用来比较size的值。比如有一个学生类,然后定义了两个学生对象,一个叫TOM,一个叫KATE,用size来表示他们的年龄,那么p1.equals(p2)的含义就是比较TOM和KATE的年龄是否相同了。

    2017-07-31 09:25:28

    共 4 条回复 >

  • 某小遠
    2017-07-28 14:09:43

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


  • 慕莱坞1186424
    2017-07-28 13:56:11

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

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530559 学习 · 6091 问题

查看课程

相似问题