在Android开发中,`equals`方法的相反操作可以理解为“不等”或“不相等”的判断。以下是具体实现方式和相关扩展知识:
1. `!=`运算符
基本数据类型(如`int`、`boolean`)直接使用`!=`进行不等判断。例如:
java
if (a != b) { ... }
2. `!object.equals()`
对象比较时,通过逻辑非运算符`!`结合`equals`方法判断不相等:
java
if (!str1.equals(str2)) { ... }
3. `Objects.equals()`的逆操作
Java 7+提供的`Objects.equals()`可安全处理`null`,其逆操作需结合`!`:
java
if (!Objects.equals(obj1, obj2)) { ... }
4. `compareTo() != 0`
对于实现`Comparable`接口的类,`compareTo()`返回非零值表示不等:
java
if (str1.compareTo(str2) != 0) { ... }
5. 哈希码与对象同一性
- `hashCode()`不相等通常暗示对象不等(但哈希冲突时可能例外)。
- 直接比较对象引用是否不同:`if (obj1 != obj2)`,但需注意这与`equals()`语义可能不一致。
6. Android特定场景扩展
- `TextUtils.isEmpty()`的逆操作:判断字符串非空且内容不等:
java
if (!TextUtils.isEmpty(str) && !str.equals(target)) { ... }
- 集合框架:`List.contains()`的逆操作通过`!list.contains(element)`实现。
7. 自定义`equals`的注意事项
- 重写`equals()`时需同步重写`hashCode()`,确保哈希一致性。
- 避免空指针异常,推荐使用`Objects.equals()`或显式`null`检查。
8. 性能优化
对频繁比较的场景(如集合操作),考虑用`==`优先筛选(如枚举或缓存对象),再结合`equals`。
附:不等判断的常见误区
混淆`==`与`equals`:`==`比较引用地址,`equals`比较内容(除非重写)。
未处理`null`:直接调用`obj.equals()`可能导致`NullPointerException`,应改为`Objects.equals(obj, other)`。