String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象,而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。
StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,它的方法是同步的,可以在多线程环境中使用而不会出现数据竞争和不一致的问题。因为方法是同步的,所以在多线程环境中使用StringBuffer会带来一些性能上的损失。
而StringBuilder 是非线程安全的,它的方法没有进行同步,不适合在多线程环境中使用。但是由于不需要进行同步,StringBuilder在单线程环境下性能比StringBuffer更好。
String常用方法:
/*** indexOf():返回指定字符的索引。* charAt():返回指定索引处的字符。* replace():字符串替换。* trim():去除字符串两端空白。* split():分割字符串,返回一个分割后的字符串数组。* getBytes():返回字符串的 byte 类型数组。* length():返回字符串长度。* toLowerCase():将字符串转成小写字母。* toUpperCase():将字符串转成大写字符。* substring():截取字符串。* equals():字符串比较。* (); 字符串转换为char数组* contains(); 字符串是否包含指定的字符序列*/@Testvoid testStringMethod(){String str = " abdcdeeFQ111rta ";System.out.println("返回r的索引=" + str.indexOf('r'));System.out.println("返回3索引处的字符=" + str.charAt(3));str = str.replaceFirst("a","z");System.out.println("一个字符串替换为z后=" + str);str = str.trim();System.out.println("去除字符串两端空白=" + str);String[] strings = str.split("ee");System.out.println("分割字符串,返回一个分割后的字符串数组=" + strings[0]);byte[] bytes = str.getBytes();System.out.print("返回字符串的 byte 类型数组:");for (byte b:bytes) {System.out.print(" " + b);}System.out.println();System.out.println("返回字符串长度="+str.length());System.out.println("将字符串转成小写字母=" + str.toLowerCase());System.out.println("将字符串转成大写字符=" + str.toUpperCase());System.out.println("截取字符串从2到5的字符=" + str.substring(2,5));System.out.println("截取字符串从2到结束的字符=" + str.substring(2));System.out.println("字符串比较\"aaa\"是否和\"bbb\"相等:" + "aaa".equals("bbb") );char[] chars = str.toCharArray();System.out.println("字符串转换为char数组");System.out.println("字符串是否包含指定的字符序列:" + str.contains("111"));}