可以使用在基本数据类型变量和引用数据类型变量中
基本数据类型之间(布尔值除外)存在自动类型转换,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