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

思考小结

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

三者的线程安全情况?

三者的性能情况?

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

你可能感兴趣的:(Java,java)