Java中的==和equals

可以使用在基本数据类型变量和引用数据类型变量中

基本数据类型之间(布尔值除外)存在自动类型转换,10==10.0,A==65 均为true

如果比较的是基本数据类型,那么比较的是数值是否相等(不一定类型相同)

如果比较的是引用数值类型,那么比较的是地址值

注意!在使用该运算符时应保持两边类型一致

equals 方法

属于java.lang.Object类内部的方法

该方法需要通过一个对象调用(适用于引用数据类型)

像 String Date File 包装类等都重写了Object 中的 equals 方法,重写后比较的不再是引用的地址,而是内部真实的内容。

Object 中的 equals

public boolean equals(Object obj) { return (this == obj); }

String 中的 equals

public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }

包装类中的 equals

public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; }

Date类中的 equals

public boolean equals(Object obj) { return obj instanceof Date && getTime() == ((Date) obj).getTime(); }

重写 equals 方法的五条原则

对称:如果x.equals(y)返回的是true,那么y.equals(x)应为ture

自反:x.equals(x)应为true

传递:x.equals(y)和x.equals(z)均为true,那么y.equals(z)应为true

任何情况下,使用该方法与null比较应该为false

任何情况下,不同类型之间的比较应为false

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgyfp.html