java提高篇之equals()方法总结-java开发java经验技巧

java提高篇之equals()方法总结-java开发java经验技巧

ID:30777550

大小:78.22 KB

页数:5页

时间:2019-01-03

java提高篇之equals()方法总结-java开发java经验技巧_第1页
java提高篇之equals()方法总结-java开发java经验技巧_第2页
java提高篇之equals()方法总结-java开发java经验技巧_第3页
java提高篇之equals()方法总结-java开发java经验技巧_第4页
java提高篇之equals()方法总结-java开发java经验技巧_第5页
资源描述:

《java提高篇之equals()方法总结-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、java提高篇Zequals。方法总结-编程开发技术java提高篇之equals()方法总结丿京文出处:chenssy超类Object中有这个equals()方法,该方法主要用于比较两个对象是否相等。该方法的源码如2publicbooleanequals(Objectobj){return(this二二obj);我们知道所有的对象都拥有标识(内存地址)和状态(数据),同时“二二”比较两个对象的的内存地址,所以说使用Object的equals()方法是比较两个对象的内存地址是否相等,即若objectl.equals(object

2、2)为true,则表示equalsl和equals2实休上是引用同一个对彖。虽然有时候Object的equals()方法可以满足我们一些基木的要求,但是我们必须要清楚我们很大部分吋间都是进行两个对象的比较,这个时候Object的equals()方法就不可以了,实际上JDK中‘String、Math等封装类都对equals()方法进彳亍了重写。卜面是String的equals()方法:publicbooleanequals(ObjectanObject){if(this==anObject){returntrue;}if(emO

3、bjectinstemccofString){StringanotherString=(String)anObject;intn=count;if(n二二anotherString.count){charvl[]二value;charv2[]二emotherString.value;inti=offset;intj=anotherString.offset;wh订e(n--!二0){if(vl[i++]!二v2[j++])returnfalse;}returntrue;rctunifalse;对于这个代码段:if(vl[i++

4、]!=v2[j++])returnfalse;我们可以非常清晰的看到String的equals。方法是进行内容比较,而不是引用比较。至于其他的封装类都差不多。在Java规范中,它对equals0方法的使用必须要遵循如下几个规则:equals方法在非空对象引用上实现相等关系:1、自反性:对于任何非空引用值X,x.equals(x)都应返回true。2、对称性:对于任何非空引用值xx.equals(y)才应返冋true。y,当且仅当y.equals(x)返回true时,3、传递性:对于任何非空引用值并且y.equals(z)返回t

5、rue,那么X、y和z,如果x.equals(y)返冋true,x.equals(z)应返回true。4、一致性:对于任何非空引用值x和y,多次调用x.equals(y)始终返回true或始终返回false,前捉是对象上equals比较屮所用的信息没冇被修改。5、?对于任何非空引用值x,x.equals(null)都应返冋false。对于上面几个规则,我们在使用的过程屮最好遵守,否则会出现意想不到的错误。在java中进行比较,我们需要根据比较的类型來选择合适的比较方式:1)?对彖域,使用equals方法。2)?类型安全的枚举,

6、使用equals或二二。3)?可能为null的对象域:使用二二和equals。4)?数组域:使用Arrays,equals。5)?除float和double外的原始数据类型:使用二二。6)?float类型:使用Float.foatToIntBits转换成int类型,然后使用=二。7)?double类型:使用Double.doubleToLongBit转换成long类型,然后使用=。至于6)、7)为什么需要进行转换,我们可以参考他们相应封装类的equals()方法,下面的是Float类的:publicbooleanequals(

7、Objectobj){rcturn(objinstaneeofFloat)&&(floatTolntBits(((Float)obj).value)==floatToIntBits(value));}原因嘛,里面提到了两点:However,therearctwocxccptions:Ifflandf2bothrepresentFloat.NaN,thentheequalsmethodreturnstrue,eventhoughFloat.NaN==Float.NaNhasthevaluefalse.Tff1repr

8、esents+0.Ofwhi1ef2represents-0.Of,orviceversa,theequaltesthasthevaluefalse,eventhough0.Of二二-0.Ofhasthevaluetrue.?????在equals()中使用getClass进

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。