关于等价性判断的学习体会
在实验二中,我尝试用“==”判断两个字符串是否相等,结果测试用例始终无法通过。通过后续的学习,我才渐渐了解了java中等价性判断的原则。
在java中,“==”针对的是引用等价性。对于基本数据类型,如int、double等,应使用“==”判断是否相等。而对于对象类型,“==”判断的是两个对象是否是在同一段内存空间(即地址是否相同),这显然不符合我们的等价性判断的初衷。equals方法则一般用于判断对象等价性,这是java中已经写好的。因此对象类型应用equals方法判断是否相等。
但是,对于用户自定义的ADT而言,equals方法默认是object类的equals方法,该方法判断的是引用等价性。因此,自定义ADT的equals方法一般需要重写。若该ADT是不可变的,则重写的equals方法应关注AF等价性(经由抽象函数映射到抽象空间中的同一对象)或行为等价性(对于相同的输入,所有方法得到的结果均相同)。若该ADT是可变的,则无需重写,直接继承object类的equals方法即可。
与equals配套的方法是hashcode方法。对于自定义的ADT,hashcode方法也是需要重写的。一大原则是等价的对象应具有相同的hashcode。

浙公网安备 33010602011771号