java中能够运用equals()要领推断两个对象是不是相称,equals() 要领用于将字符串与指定的对象比较。假如给定对象与字符串相称,则返回 true;不然返回 false。
该要领的源码以下:
public boolean equals(Object obj) { return (this == obj); }
一切的对象都具有标识(内存地址)和状况(数据),同时“==”比较两个对象的的内存地址,所以说运用Object的equals()要领是比较两个对象的内存地址是不是相称,即若object1.equals(object2)为true,则示意equals1和equals2实际上是援用同一个对象。
虽然有时刻Object的equals()要领能够满足我们一些基础的请求,然则我们必须要清楚我们很大部份时刻都是举行两个对象的比较,这个时刻Object的equals()要领就不能够了,实际上JDK中,String、Math等封装类都对equals()要领举行了重写。
下面是String的equals()要领:
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = count; if (n == anotherString.count) { char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; while (n-- != 0) { if (v1[i++] != v2[j++]) return false; } return true; } } return false; }
关于这个代码段:if (v1[i++] != v2[j++])return false;我们能够异常清楚的看到String的equals()要领是举行内容比较,而不是援用比较。至于其他的封装类都差不多。
在Java范例中,它对equals()要领的运用必须要遵照以下几个划定规矩:
equals 要领在非空对象援用上完成相称关联:
1、自反性:关于任何非空援用值 x,x.equals(x) 都应返回 true。
2、对称性:关于任何非空援用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
3、传递性:关于任何非空援用值 x、y 和 z,假如 x.equals(y) 返回 true,而且 y.equals(z) 返回 true,那末 x.equals(z) 应返回 true。
4、一致性:关于任何非空援用值 x 和 y,屡次挪用 x.equals(y) 一直返回 true 或一直返回 false,条件是对象上 equals 比较中所用的信息没有被修正。
5、 关于任何非空援用值 x,x.equals(null) 都应返回 false。
关于上面几个划定规矩,我们在运用的过程当中最好恪守,不然会涌现意想不到的毛病。
在java中举行比较,我们须要依据比较的范例来挑选适宜的比较体式格局:
1) 对象域,运用equals要领 。
2) 范例平安的罗列,运用equals或== 。
3) 可能为null的对象域 : 运用 == 和 equals 。
4) 数组域 : 运用 Arrays.equals 。
5) 除float和double外的原始数据范例 : 运用 == 。
6) float范例: 运用Float.foatToIntBits转换成int范例,然后运用==。
7) double范例: 运用Double.doubleToLongBit转换成long范例,然后运用==。
更多java学问请关注java基础教程。
以上就是java怎样推断两个对象是不是相称的细致内容,更多请关注ki4网别的相干文章!