“==”
- 基本数据类型比较值
String name1="Tom";//直接赋值
String name2="Tom";
System.out.println(name1==name2);//TRUE
- 应用类型比较地址
//引用类型 使用new
String name3 = new String("123");
String name4 = new String("123");
System.out.println(name3==name4);//FALSE
“epuals”
object中的equals比较地址
String 中的重写了object中的equals 比较字符串内容是否相同
String name3 = new String("123");
String name4 = new String("123");
System.out.println(name3.equals(name4));//TRUE
String中的equals代码分析
利用向上转型,使得特定的方法可以利用泛型类,来减少代码量。 但是由于向上转型丢失了子类特有的方法,如果非要使用这些方法,那么又得重新向下转型,再重新用每个子类的特有方法
public boolean equals(Object anObject) {//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;
}