Java 中的String、StringBuffer、StringBuilder

什么是String?(了解)

String是Java 1.0 提出的,用来保存字符串的,被保存的字符串由一对双引号""包含。

String 有哪些特性?(熟悉)

  • String是一个final类,代表不可变的字符序列。
  • 字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改。线程安全。
  • String对象的**字符内容是存储在一个字符数组value[]**中的。
//在String类中,该值用于存储字符串,final修饰,导致字符串不可变
private final char value[];

String的两种创建方式?(掌握)

  • 直接赋值:String name = “Gump”;
    这种方式它首先会先从常量池查看是否有"Gump" 这个数据空间,如果有就直接指向,如果没有就创建一个"Gump"这个数据空间然后指向它。注意name指向的是常量池的空间地址。

  • 调用构造器:String name = new String(“Gump”);
    这种方式则是先在堆中创建空间,里面维护了value属性,指向常量池的"Gump"空间。如果常量池中没有’‘Gump’',则重新创建,如果有就直接通过value指向。注意name指向的是堆中的空间地址。

为了更好的掌握两种创建方式的区别,可以先去了解JVM中的堆栈方法区等概念。

如何创建格式化的字符串?(熟悉)

可以format() 方法

String 类使用静态方法 format() 返回一个String 对象而不是 PrintStream 对象。

String 类的静态方法 format() 能用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。

示例如下:

float floatVar = 1.688F;
int intVar = 168;
String stringVar = "Gump";
String fs;
fs = String.format("浮点型变量的值为 %f" +
    "%n整型变量的值为 %d" +
    "%n字符串变量的值为 %s", floatVar, intVar, stringVar);
System.out.println(fs);

输出如下:

浮点型变量的值为 1.688000
整型变量的值为 168
字符串变量的值为 Gump

String.format()的常用转换符说明:

%s字符串类型
%d十进制整数
%f浮点数
%%百分号
%n换行

String常用的API有哪些?(熟悉)

API(方法)方法描述
int length()返回字符串长度
boolean equals(Object anObject)将此字符串与指定的对象比较。
boolean equalsIgnoreCase(String anotherString)将此 String 与另一个 String 比较,不考虑大小写。
byte[] getBytes()使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
String[] split(String regex)根据给定正则表达式的匹配拆分此字符串。
String replaceAll(String regex, String replacement)使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
isEmpty()判断字符串是否为空。
String substring(int beginIndex)返回一个新的字符串,它是此字符串的一个子字符串。
String trim()返回字符串的副本,忽略前导空白和尾部空白。

String的API功能过于强大,就不一一列举了。(你能想到的对字符串的操作,都先去API里面找,实在找不到再自行定义

什么是StringBuffer和StringBuilder?(了解)

可以简单理解为一个容器,其对象能够被多次的修改(字符长度可变),并且不产生新的未使用对象。

由于String 对象的值无法改变,如果需要对字符串做很多修改,String的效率就不敢恭维了,因此引入 StringBuffer & StringBuilder 类。
它们的很多方法与String相同。
StringBuffer 在JDK1.0的时候就已经存在。
StringBuilder 在JDK1.5的时候发布。

StringBuffer类不同于String,其对象必须使用构造器生成。有三个构造器:

  • StringBuffer():初始容量为16的字符串缓冲区
  • StringBuffer(int size):构造指定容量的字符串缓冲区
  • StringBuffer(String str):将内容初始化为指定字符串内容

StringBuffer和StringBuilder有什么区别?(掌握)

  • 线程是否安全
    StringBuilder 和 StringBuffer 拥有相同的方法,但是在 StringBuffer 上每个方法都是使用 synchronized来修饰的,因此 StringBuffer 是线程安全的

  • 性能
    既然 StringBuffer 是线程安全的,它的所有公开方法都是同步的,StringBuilder 是没有对方法加锁同步的,所以毫无疑问,StringBuilder的性能要远大于 StringBuffer

思考小结

三者分别于什么时候提出来?

三者的线程安全情况?

三者的性能情况?

三者分别适用于什么场景?

  • 37
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值