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

最新文章

  1. webpack入坑之旅(三)webpack.config入门
  2. BZOJ1568: [JSOI2008]Blue Mary开公司
  3. [转载]Altium规则详解及设置
  4. UESTC 881 神秘绑架案 --二维DP
  5. jQuery对象与DOM对象之间的转换
  6. JS 精粹(方法)
  7. javascript高级知识点——指定上下文实现
  8. CentOS安装Git服务器
  9. JsonCpp(C++程序使用)
  10. Linux入门篇(四)——Vim的使用与Bash
  11. Core官方DI解析(2)-ServiceProvider
  12. JavaScript(二)
  13. Django1.11.7配置静态文件
  14. .NET代码混淆——开源.net 混淆器ConfuserEx介绍
  15. how many shards and replicas should be set for Elastic Search
  16. 一个非常好用的图片切割工具(c# winform开发)
  17. 用Linux中man命令查询C函数
  18. (译)Getting Started——1.3.2 Using Design Patterns(使用设计模式)
  19. Linux 下添加用户,修改权限
  20. HBase import tsv,csv File

热门文章

  1. 如何设计提高服务API的安全性(二)API密钥方式详解
  2. python中的 dict() 函数
  3. Html引入百度富文本编辑器ueditor及自定义工具栏
  4. SpringBoot 发送简单邮件
  5. 创建readonly只读用户脚本
  6. org.json package
  7. Windows C盘扩容
  8. Graylog-Sidecar
  9. 资源管理(Resource Management),知识点
  10. 【java异常】Unable to install breakpoint in