String、StringBuilder与StringBuffe

2018-07-25  本文已影响0人  cccccttttyyy

1.String

String是不可变的,他的实质是被final修饰过的char数组。

 public final class String
 implements java.io.Serializable, Comparable<String>, CharSequence     {
   /** The value is used for character storage. */
   private final char value[];
编号 方法 说明
1 char charAt(int index) 返回指定索引处的 char 值。
2 int compareTo(String anotherString) 按字典顺序比较两个字符串。
3 boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束。
4 byte[] getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
5 int length() 返回此字符串的长度。
6 boolean matches(String regex) 告知此字符串是否匹配给定的正则表达式。
7 String replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
8 String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。
9 String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。
10 char[] toCharArray() 将此字符串转换为一个新的字符数组。
11 String trim() 返回字符串的副本,忽略前导空白和尾部空白。

String s1 = "abc"; // 常量池
String s2 = new String("abc"); // 堆内存中
System.out.println(s1==s2); // false两个对象的地址值不一样。
System.out.println(s1.equals(s2)); // true

2.StringBuilder与StringBuffer

String:字符串常量,字符串长度不可变。用于存放字符的数组被声明为final。
StringBuffer:字符串变量(Synchronized,即线程安全)。可将字符串缓冲区安全地用于多个线程。
StringBuilder:字符串变量(非线程安全)。在内部 StringBuilder 对象被当作是一个包含字符序列的变长数组。

  1. 如果要操作少量的数据用 String,大量操作使用StringBuffer 和 StringBuilder 是因为能够被多次的修改,并且不产生新的未使用对象。
  2. 单线程大量操作数据用StringBuilder,它的速度大于StringBuffer。
  3. 多线程大量操作数据用StringBuffer,但是stringbuffer 的线程安全,仅仅是保证 jvm 不抛出异常顺利的往下执行而已,它可不保证逻辑正确和调用顺序正确,所以并不常用。
StringBuildera=newStringBuilder(""); 
a.append("i'm a good boy");//附加
System.out.println(a.toString());
a=a.reverse();//翻转
System.out.println(a.toString());
a.delete(0,1);//删除
System.out.println(a.toString());
a.insert(0,"ha");//插入
System.out.println(a.toString());
a.replace(1,2,"666");//替换
System.out.println(a.toString()); 

对应结果

i'm a good boy
yob doog a m'i
ob doog a m'i
haob doog a m'i
h666ob doog a m'i

上一篇下一篇

猜你喜欢

热点阅读