为什么java内要判断两个对象是否相等呢?

Python020

为什么java内要判断两个对象是否相等呢?,第1张

一个标准的实体类的4大基本规则:1.封装(属性私有化,分别提供对应的get与set方法等),2、提供无参构造,3、重写:toString,equals,hashCode这3个方法,4、实现java.io.Serializable接口。所以java要判断两个对象是否相等。

先说equals,重写它就是为了以后比较对象是否相等,比如你问题中的假如父类是person,子类是student,那么当我们new了几个student后,在程序中怎么去判断这几个student实例是否是同一个学生呢?这时如果我们的student重写了equals(比如你按照学号来比较),那么你就可以用S1.equals(S2)来比较了。

至于hashCode,那是因为假如我们存取数据时 是存放在键值对中时(比如Map),这时候光靠equals效率不高,这时候用对象的哈希码(即hashCode方法得到的)来查找和比较更快,所以一般重写equals方法必须重写hashCode方法,因为java规定相等的对象必须有相等的哈希码。

你这个compareTo方法是干啥的?思路不清啊....

你应该写的是一个点的对象(Position)..他要和别一个点(Position

)去比较.所以至少你的Position

类中的compareTo这个方法里要获得别一个点的对象.

也就是说应该在实现类中有这样的形式

点1对象.compareTo(点2对象)//说白了就是你的实现类里这行

System.out.println("两点到原点的距离之差为"+compareTo())

应该改成

System.out.println("两点到原点的距离之差为"+a.mpareTo(b)

在计较的时候.也就是你的compareTo()这个方法里..就应该是对象1的距离-对象2的举例

也就是类似这样的.

Math.sqrt(a.getx()*a.getx()*+a.gety()*a.gety())-Math.sqrt(b.getx()*b.getx()+b.gety()*b.gety()//