设为首页 加入收藏

TOP

Java重写equals方法
2015-08-31 21:24:13 来源: 作者: 【 】 浏览:32
Tags:Java 重写 equals 方法

何时需要重写equals()


当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念)。


object规范规定,如果要重写equals(),也要重写hashcode()


如何覆写equals()


覆写equals方法


1? 使用instanceof操作符检查“实参是否为正确的类型”。


2? 对于类中的每一个“关键域”,检查实参中的域与当前对象中对应的域值。


3. 对于非float和double类型的原语类型域,使用==比较;


4? 对于对象引用域,递归调用equals方法;


5? 对于float域,使用Float.floatToIntBits(afloat)转换为int,再使用==比较;


6? 对于double域,使用Double.doubleToLongBits(adouble)转换为int,再使用==比较;


7? 对于数组域,调用Arrays.equals方法。


例子:


? ? /****
? ? *
? ? *
? ? * java 八大基本数据类型
? ? */
? ? private int A_int;
? ? private short A_short;
? ? private char A_char;
? ? private byte A_byte;
? ? private double A_double;
? ? private float A_float;
? ? private boolean A_boolean;
? ? private long A_long;
? ? private Demo demo;//对象
? ? private int[] intArray;//数组域
? ? private Demo[] demos;//对象数组域
? ?


? ? @Override
? ? public boolean equals(Object obj) {
? ? ? ? if (!(obj instanceof MyDemo )){
? ? ? ? ? ? return false;
? ? ? ? }
? ? ? ? MyDemo demo=(MyDemo)obj;
? ? ? ? return demo.A_int==A_int&&
? ? ? ? demo.A_byte==A_byte&&
? ? ? ? demo.A_boolean ==A_boolean&&
? ? ? ? demo.A_short==A_short&&
? ? ? ? demo.A_char==A_char&&
? ? ? ? demo.A_long==A_long&&
? ? ? ? Float.floatToRawIntBits(demo.A_float)==Float.floatToRawIntBits(A_float)&&
? ? ? ? Double.doubleToRawLongBits(demo.A_double)==Double.doubleToRawLongBits(A_double)&&
? ? ? ? demo.demo.equals(demo)&&
? ? ? ? this.intsequals(demo.intArray)&&
? ? ? ? this.objArrayequals(demo.demos);
? ? }
? ?
? ? private boolean intsequals(int[] ints){
? ? ? ? return Arrays.equals(intArray, ints);
? ? }
? ? private boolean objArrayequals(Demo[] demos){
? ? ? ? return Arrays.equals(demos, demos);
? ? }


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Spring多数据源的配置 下一篇浅谈Java中的hashcode方法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: