- 创建对象
-
直接赋值
-
通过构造器
String s1 = "aa"; String s2 = "aa"; String s3 = new String("aa"); System.out.println(s1 == s2);//true System.out.println(s1 == s3);//false
通过直接赋值的方式是先到常量区(运行时常量区是方法区的一部分)寻找是否存在当前字符串,若存在则引用当前字符串地址,
通过构造器的方式每new一个对象就生成一个String对象,并且在常量池中生成一个字符串
-
不可变性
String字符串的改变是新对象的生成而不是自身的改变
String s1 = "a"; String s1 = "aa"; //在常量区又生成了一个"aa"字符串,而不是"a"变成了"aa"
-
字符串拼接符 + +=
-
仅有的经过重载的操作符
-
使用多个+拼接的字符串("abc"+"111"+"sdf"),编译器默认创建StringBuilder对象调用append()方法拼接字符串
-
在循环内拼接字符串应使用StringBuilder,如下面代码所示当进入循环后才默认创建StringBuilder对象,所以每个循环都会创建一个StringBuilder对象,这样性能是较低的
String s = ""; for(int i = 0;i<=args.length;i++) { s += args[i]; }
所以应该手动创建一个StringBuilder对象
StringBuilder sb = new StringBuilder(); for(int i = 0;i<=args.length;i++) { sb.append(args[i]); }
-
-
StringBuilder
线程不安全,性能较高
-
StringBuilder
线程安全,性能较低
-
AbstractStringBuilder
StringBuilder和StringBuilder的父类,是一个抽象类,很多方法已经在此类中实现
正则表达式
-
规则:到百度百科上找,Pattern类
-
String内的正则表达式功能
split(String regex) 将字符串从正则表达式的位置切开 split(String regex, int limit) 限制切开的次数