== 运算符
-
==是运算符 - 可以使用在基本数据类型变量和引用数据类型变量中
- 基本数据类型之间(布尔值除外)存在自动类型转换,
10==10.0,A==65均为true - 如果比较的是基本数据类型,那么比较的是数值是否相等(不一定类型相同)
- 如果比较的是引用数值类型,那么比较的是地址值
- 注意!在使用该运算符时应保持两边类型一致
equals 方法
-
属于
java.lang.Object类内部的方法 -
该方法需要通过一个对象调用(适用于引用数据类型)
-
像
StringDateFile包装类等都重写了Object中的equals方法,重写后比较的不再是引用的地址,而是内部真实的内容。
-
Object中的equalspublic boolean equals(Object obj) { return (this == obj); } -
String中的equalspublic 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; } -
包装类中的
equalspublic boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((Integer)obj).intValue(); } return false; } -
Date类中的
equalspublic 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