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); } }