java基础四-String/StringBuffer/StringBuilder区别
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(); 字符串是否包含指定的字符序列 */ @Test void 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")); }