转自zhiweianran的博客,为自己记录用~~~~
equals是重写object的方法,而
equalsIgnoreCase是String自己定义的方法
前者用于比较两个对象是否相等,而后者用于比较字符串忽略大小写的情况下是否相等
public boolean equalsIgnoreCase(String anotherString)将此 String 与另一个 String 进行比较,不考虑大小写。如果两个字符串的长度相等,并且两个字符串中的相应字符都相等(忽略大小写),则认为这两个字符串是相等的。 在忽略大小写的情况下,如果下列至少一项为 true,则认为 c1 和 c2 这两个字符相同。 这两个字符相同(使用 == 运算符进行比较)。 对每个字符应用方法 Character.toUpperCase(char) 产生相同的结果。 对每个字符应用方法 Character.toLowerCase(char) 产生相同的结果。 参数: anotherString - 与此 String 进行比较的 String。 返回:如果参数不为 null,且这两个 String 在忽略大小写时相等,则返回 true;否则返回 false。
String.equals()对大小写敏感,而String.equalsIgnoreCase()忽略大小写
例如:"ABC".equals("abc")是false
"ABC".equalsIgnoreCase("abc")为ture
equal与==的区别:
“==”用于标胶基本数据类型(比较值,也可以比较内存的存放地址)
equals方法是继承自Object中的equals方法,初始行为是比较对象的内存地址,一般情况下都会被覆盖,比较对象的内容是否相等。
重写equals方法时,必须重写hashCode方法。如果没有重写,任何对象的hashCode()的返回值都是不相等的。
hashCode()与equals()生成算法的重写:
1、尽量保证使用对象的同一个属性来生成hashCode()和equals();
2、二者必须同时重写
例如:
public boolean equals(Object obj){
if(this==obj)
return true;
if(obj==null)
return false;
if(getClass()!=obj.getClass())
return false;
Employee other=(Employee)obj;
if(age!=other.age)
return false;
if(id==null){
if(other.id!=null)
return false;
}else if(!id.equals(other.id))
return false;
return true;
}
public int hashCode(){
final int prime=31;
int result=1;
result=prime*result+age;
result=prime*result+((id==null)?0:id.hashCode());
return result;
}