Java对重写equals方法有一些约定,其中一条就是要求对称性,即ab返回true,ba也要返回true。下面的例子就是重写所范的错误。
代码:
public final class CaseInsensitiveString {
private final String s;
public CaseInsensitiveString(String s) {
this.s = s.requireNonNull(s);
}
@Override
public boolean equals( obj) {
if(obj instanceof CaseInsensitiveString) {
return s.equalsIgnoreCase(((CaseInsensitiveString) obj).s);
}
if(obj instanceof String) {
return s.equalsIgnoreCase(((String)obj));
}
return false;
}
}
public class Test {
public static void main(String[] args) {
CaseInsensitiveString cis=new CaseInsensitiveString(\"Polish\");
String s=\"polish\";
System.out.println(cis.equals(s));//true
System.out.println(s.equals(cis));//false
}
}
测试结果
true
false
结论
CaseInsensitiveString 的equals方法对大小写不敏感,String的equals方法对大小写方法敏感造成不对称。
继续阅读与本文标签相同的文章
-
8 分钟了解 Kubernetes
2026-05-18栏目: 教程
-
Helm 从入门到实践 | 从 0 开始制作一个 Helm Charts
2026-05-18栏目: 教程
-
阿里云突发性能实例t5 和共享型实例xn4 n4的区别
2026-05-18栏目: 教程
-
【DockerCon2017技术解读】Docker特性介绍
2026-05-18栏目: 教程
-
面向海量数据的极致成本优化-云HBase的一体化冷热分离
2026-05-18栏目: 教程
