码迷,mamicode.com
首页 > 其他好文 > 详细

[转帖]String、StringBuilder与StringBuffer

时间:2019-11-22 23:34:34      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:abc   本质   bytes   副本   final   多个   测试   zab   lang   

String、StringBuilder与StringBuffer

https://www.jianshu.com/p/37f3799bdb56

 

1.String

  • 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[];
  • String方法

编号方法说明
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的面试题

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 不抛出异常顺利的往下执行而已,它可不保证逻辑正确和调用顺序正确,所以并不常用。
  • StringBuilder操作小案例

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

[转帖]String、StringBuilder与StringBuffer

标签:abc   本质   bytes   副本   final   多个   测试   zab   lang   

原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/11882091.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!