(一)声明字符串的几种方式
String a = "123";
String b = new String("abc");
String c = "abc" + "def";
String d = "1" + 1; // 连接符
System.out.println(a); // 123
System.out.println(b); // abc
System.out.println(c); // abcdef
System.out.println(d); // 11
(二)常量池与字符串比较
类似于“java”的字符串类会被在常量池;而使用new创建的不会, 应该使用equals()方法才能对值进行比较。
String str10 = "java";
String str11 = "java";
String str12 = "ja"+"va"; // 会被计算然后放在常量池
String str13 = new String("java");
System.out.println(str10 == str11); // true
System.out.println(str10 == str12); // true
System.out.println(str10 == str13); // false
System.out.println(new String("java").equals("java")); // true
以下是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;
}