String、StringBuilder和StringBuffer的区别以及应用场景

主要从以下几个角度来讨论区别和应用场景:

一、底层存储方面

String:是一个只读字符串,底层是final修饰的数组,不可被继承,存储在字符串常量池中。每次进行拼接操作时,底层会隐式new一个 StringBuilder对象,然后利用append()方法进行拼接,返回时调用toString()方法。

jdk1.8:使用char[]来存储数据  private final char[] value;
jdk1.9: 使用byte[]来存储数据  private final byte[] value;
char修改为byte的原因:因为char2字节的,当存储字符(ISO-8859-1编码是单字节编码)时,会浪费一个
空间,存储汉字字符则正好;为了节省空间,利用byte进行存储,如果要存储中文字符应该怎么办呢?定义了
一个coder属性,默认有01两个值:
-- 如果string判断字符串只有latin-1(ISO-8859-1、单字节编码)时,默认为0;
-- 只有utf16(双字节编码),默认为1.
//用coder标示字符串中所有的字符是不是都可以用一个字节表示,它的值只有两个
LATIN1:标示所有字符都可以用一个字节表示;
UTF16:标示字符串中部分字符需要两个字节表示。
private final byte coder;

public int length() {
	return value.length >> coder;
}

StringBuilder和StringBuffer:生成的对象存储在

  1. 都继承AbstractStringBuilder类;
  2. 采用模板设计模式进行整体设计;
  3. 默认大小为16,扩容倍数为2倍。

二、线程安全性

String:是final修饰的对象,不可变,因此是线程安全的;
StringBuilder:非线程安全的;
StringBuffer:线程安全的,每个方法都加了Synchroized锁。

三、性能方面

String:final修饰的不可变对象,每次进行字符串拼接、截取等修改操作时,底层都会重新申请内存,生成新的对象,因此效率最低
StringBuilder:是可变的类,效率最高
StringBuffer:是可变的类,但每个方法都加了Synchroized锁,效率低于StringBuilder。

四、应用场景

String:字符串不经常变化的场景中,比如常量的声明、少量的字符串操作中;
StringBuilder: 频繁进行字符串运算(拼接、删除以及插入等),且为单线程的环境;
StringBuffer:频繁进行字符串运算(拼接、删除以及插入等),且为多线程的环境。

相关推荐

  1. String、StringBuilderStringBuffer区别以及应用场景

    2024-03-13 11:52:05       41 阅读
  2. ArrayListLinkedList区别以及应用场景

    2024-03-13 11:52:05       39 阅读
  3. String、StringBufferStringBuilder之间区别

    2024-03-13 11:52:05       39 阅读
  4. String,StringBuffer,StringBuilder区别

    2024-03-13 11:52:05       28 阅读
  5. mybatis中$#区别以及各自使用场景

    2024-03-13 11:52:05       35 阅读
  6. 【vue】computedwatch区别应用场景

    2024-03-13 11:52:05       43 阅读
  7. TCPUDP协议区别应用场景

    2024-03-13 11:52:05       107 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-13 11:52:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-13 11:52:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-13 11:52:05       82 阅读
  4. Python语言-面向对象

    2024-03-13 11:52:05       91 阅读

热门阅读

  1. 程序员如何选择职业赛道?

    2024-03-13 11:52:05       42 阅读
  2. kafka入门教程

    2024-03-13 11:52:05       48 阅读
  3. 镜片行业调研报告

    2024-03-13 11:52:05       32 阅读
  4. 中间件MQ面试题之Kafka

    2024-03-13 11:52:05       50 阅读
  5. 每天几道面试题|Kafka基础概念(一)

    2024-03-13 11:52:05       46 阅读
  6. 【C++】内存泄漏

    2024-03-13 11:52:05       37 阅读
  7. 阿里云数据盘挂载目录

    2024-03-13 11:52:05       45 阅读