1.不可变String:String对象是不可变的,每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象。任何对String的改变都会引发新的对象生成。
public static void main(String[] args) {
String a = "abc";
String b = a;
System.out.println(b);
a = "def";
System.out.println(b);
}
2.重载“+”与StringBuilder:运算符“+”和“+=”被重载用于字符串的操作。当拼接多个字符串时,编译器自动引用了StringBuilder变量,使用StringBuilder可以很高效的进行字符串拼接。StringBuilder线程不安全,效率高。
操作符“+”连接String:
public static void main(String[] args) {
String s = "hello java";
String s1 = "hello";
String s2 = " java";
String s3 = s1 + s2;
System.out.println(s == s3);
System.out.println(s.equals(s3));
}
StringBuilder:
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 26; i++) {
char temp = (char) ('a' + i);
sb.append(temp);
}
System.out.println(sb);
sb.reverse();
System.out.println(sb);
sb.setCharAt(25, 'A');
System.out.println(sb);
sb.insert(0, "字母:").insert(0, 1).insert(1, 2);
System.out.println(sb);
sb.delete(0, 2);
System.out.println(sb);
}
3.无意识的递归:想打印对象的内存地址,在toString()方法中不能使用this关键字返回字符串,this关键字会转换为String对象,从而递归调用toString()方法,会抛出异常,需要使用super.toString()方法打印内存地址。
@Override
public String toString() {
return "Test23 address:" + super.toString();
}
public static void main(String[] args) {
List<Test23> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(new Test23());
System.out.println(list);
}
}
1655

被折叠的 条评论
为什么被折叠?



