Java - String
String
String 表示字符串类型,是由一对双引号括起来的任意长度的字符串序列。字符串不是一个基本类型,而是唯一一个不需要new
关键字就可以创建的类
字符串的原始类
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
}
字符串继承关系
-
字符串中的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节
-
字符串类被
final
修饰,表示不能被继承 -
字符串数据被保存在
private final char value[]
数组,表示String
对象不可被更改 -
字符串类实现了Serializable 接口,可以串行化
-
字符串类实现了Comparable接口,可以进行比较
字符串创建的两种不同方式
常用的字符串构造器
String string = new String();
String string = new String(String original);
String string = new String(char[] string);
String string = new String(char[] string,int startIndex,int count);
String string = new String(byte[] byteString);
字符串常用的函数
StringBuffer和StringBuilder
StringBuffer类继承关系
StringBuilder类继承关系
String
是java语言非常基础和重要的类,提供了构造和管理字符串的各种基本逻辑。它是典型的Immutable
,被声明成为Immutable
类,被声明成为 final class
,所有属性也都是 final
的。也由于它的不可变性,类似拼接、裁剪字符串等动作,都会产生新的 String
对象。由于字符串操作的普遍性,所以相关操作的效率往往对应用性能有明显影响。
StringBuffer
是为解决上面提到拼接产生太多中间对象的问题而提供的一个类,我们可以用 append
或者 add
方法,把字符串添加到已有序列的末尾或者指定位置。StringBuffer
是一个线程安全的可修改字符序列。StringBuffer
的线程安全是通过在各种修改数据的方法上用 synchronized
关键字修饰实现的。
StringBuilder
在能力上和 StringBuffer 没有本质区别,但是它去掉了线程安全的部分,有效减小了开销,是绝大部分情况下进行字符串拼接的首选。
StringBuffer和StringBuilder 底层都是利用可修改的数组,二者都继承了 AbstractStringBuilder
,里面包含了基本操作,区别仅在于最终的方法是否加了 synchronized
,构建时初始字符串长度加 16(这意味着,如果没有构建对象时输入最初的字符串,那么初始值就是 16)。我们如果确定拼接会发生非常多次,而且大概是可预计的,那么就可以指定合适的大小,避免很多次扩容的开销。扩容会产生多重开销,因为要抛弃原有数组,创建新的(可以简单认为是倍数)数组,还要进行 arraycopy
abstract class AbstractStringBuilder implements Appendable, CharSequence {
/**
* The value is used for character storage.
*/
char[] value;
}
public StringBuilder() {
super(16);
}
StringBuffer和StringBuilder的常用方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2021-05-14 Mysql 8.0 安装