==和equals的区别
==
-
基本数据类型==比较的是值
-
引用数据类型==比较的是对象的内存地址
equals()
- 不能用于判断基本数据类型的变量,只能判断两个对象是否相等。
- equals()方法存放于Object类中,而Object类是所有类的间接或直接父类
Object类equals()方法:
public boolean equals(Object obj){
return(this == obj);
}
equals()方法存在两种使用情况:
-
类没有覆盖equals()方法:通过equals()比较该类的两个对象时,等价于通过**“==**”比较两个对象,使用默认的Object类equals()方法。
-
类覆盖了equals()方法:一般覆盖equals()方法来比较两个对象中的属性是否相等
String A="dd"; String B = new String("dd"); String C ="dd"; A == B //FALSE A.equals(B)//TRUE A == C //TRUE
说明:
-
String中的equals方法是被重写过的。Object的equals方法比较的是对象的内存地址,而String首先比较地址,不相等则比较对象的值(更宽松)
-
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; }
-