2015-11-17
2 回答
看一下 String中重写Object的equals源码
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
object类的equals()方法,判断调用该方法的对象与要比较的对象是不是同一个对象(判断地址),而String类中的equals()方法,则判断当前字符串与传递进来的字符串的内容是否一致。
针对楼上说的第二问,你忽略的常量池技术:
以下两种创建String对象方式
String a="1";
String b="1";
System.out.println(a==b);结果true,a和b指向常量池中同一个内存空间
String a1=new String("2");
String b1=new String("2");
System.out.println(a1==b1);结果false,a1和b1分别位于堆中不同的内存空间
举报