1.首先比较下String.equals()和Object.equals()两个方法。
以前对应这两个方法是很混淆,比如
Object obj1 = new Object();
Object obj2 = new Object();
使用 obj1.equals(obj2)返回false;而
String str1 = new String("abc");
String str2 = new String("abc");
使用 str1.equals(str2)返回true,看到这样的结果很疑惑,然后查看了Object.equals和String.equals的源码。
Object.equals():
public boolean equals(Object obj) {
return (this == obj);
}
代码很简单,在看看String.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()方法它是判断调用equals()方法的引用与传进来的引用是否一致,即表示这两个引用是否指向的是同一个对象。对于Object类的equals()方法来说,它等价于==;对于String的equals方法来说他是判断当前字符串与传进来的字符串是否一致(源码中通过对字符串的每个字符进行比较)。对于String类型的相等性来判断,使用equals,不要使用==。
查看了jdk api的文档,前者解释为:指示其他某个对象是否与此对象“相等”。后者解释为:将此字符串与指定的对象比较。当且仅当该参数不为 null
,并且是与此对象表示相同字符序列的 String
对象时,结果才为 true。
2.关于String的拼接
3.关于String s="abc"的理解
4.关于String s=new String("abc")的理解