java中String类StringBuffer类和StringBuilder类详解

String类

String 类不能被继承,因为被final修饰

String的底层是一个字符数组,因为它被final修饰一旦确定了值不可被更改。

概述:

​ java.lang.String类代表字符串。Java程序中所有的字符串文字(例如:“abc”)都可以看作是实现此类的实例。

​ 类String中包括用于检查字符串的方法,比如用于比较字符串,搜索字符串,提取子字符串以及创建具有翻译为大小写的所有字符串的副本。

特点:

  1. 字符串不变:字符串的值在创建后不能被改变。

    String str1 = "abc";
    String str2 = "abc";
    
    此时str1 等于 str2 ???why?
    因为通过直接赋值的方式创建的String将会被存储到方法区的常量池,系统将会在下一次创建这样的字符串时去常量池查找该值,如果有这个值就把该地址返回给这个String变量。
    

    字符串常量池:
    字符串常量池

  2. 因为String对象是不可改变的,所以它可以被共享。

  3. "abc"等效于 char[] data = {'a','b','c'};

    String str= new String(data);

1、字符串的创建

​ String =创建的字符串存储在常量池中,而 new 创建的字符串对象在堆上:

// String直接创建,在常量池创建值
String str = "abc";
// new对象创建,在堆中创建值
String str = new String("abc");
// 传入char[]
char[] chs = {'a','b','c'};
String str = new String(chs);

2、获取功能的方法

  1. int length() 返回此字符串的长度。
  2. boolean equals(Object anObject)将此字符串与指定的对象比较。
  3. String concat(String str)将指定字符串连接到此字符串的结尾。
  4. char charAt(int index)返回指定索引处的 char 值。
  5. int indexOf(String str)返回指定子字符串在此字符串中第一次出现处的索引。
  6. int lastIndexOf(String str返回指定子字符串在此字符串中最右边出现处的索引。
  7. String substring(int beginIndex)返回一个新的字符串,它是此字符串的一个子字符串。
  8. String substring(int beginIndex, int endIndex)返回一个新字符串,它是此字符串的一个子字符串。
  9. String[] split(String regex)根据给定正则表达式的匹配拆分此字符串。如果有尾随的空字符串,不会加入到切割后的字符串数组当中。
  10. contains(CharSequence chars)判断是否包含指定的字符系列。
  11. boolean startsWith(String prefix)测试此字符串是否以指定的前缀开始。
  12. boolean endsWith(String suffix)测试此字符串是否以指定的后缀结束

3、转换功能的方法

  1. char[] toCharArray()将此字符串转换为一个新的字符数组。
  2. byte[] getBytes()使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
  3. String replace(char oldChar, char newChar)返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
  4. String toUpperCase()使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
  5. String toLowerCase()使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
  6. String trim()返回字符串的副本,忽略前导空白和尾部空白。

4、静态方法

  1. static String join(CharSequence delimiter, CharSequence... elements)返回由 CharSequence elements的副本组成的新String,该副本与指定的 delimiter的副本连接在一起.

    String str = String.join("拼接符","元素1","元素2",...);
    String str = String.join("-","a","b","c");
    // str = "a-b-c"
    

StringBuffer类和StringBuilder类

string家族

StringBuffer和StringBuilder的方法类似

StringBuffer类

线程安全,可变的符号序列。字符串缓冲区就像一个String,但可以修改值, 并且不产生新的未使用对象。

多线程的情况下为了保证线程安全使用StringBuffer

StringBuilder类

一个可变的字符序列。此类提供与StringBuffer的API,但不保证同步(线程不安全)

StringBuilder不能安全的使用**多线程。如果需要同步,那么建议使用StringBuffer**

如果不需要保证线程安全的话建议优先使用StringBuilder

  1. 构造方法:
    • StringBuilder():构造一个没有字符的字符串构建器,初始容量为16个字符。
    • StringBuilder(CharSequence seq):构造一个包含与指定的相同字符的字符串构建器CharSequence。
    • StringBuilder(int capacity):构造一个没有字符的字符串构建器,由capacity参数指定初始容量。
    • StringBuilder(String str):构造一个初始化为指定字符串内容的字符串构建器。长度为16+传入字符串长度
  2. 成员方法:

    ​ 底层是一个char[]如果长度不够,会自动扩容

    • public StringBuffer append(String s) :将指定的字符串追加到此字符序列。
    • public StringBuffer reverse():将此字符序列用其反转形式取代。
    • public delete(int start, int end):移除此序列的子字符串中的字符。
    • public insert(int offset, String str):将 str 参数的字符串插入此序列中。
    • replace(int start, int end, String str)
      使用给定 String 中的字符替换此序列的子字符串中的字符。
    3、String与StringBuilder的转换
    • String -> StringBuilder
    // 第一种
    String str = "abc";
    StringBuilder sb=new StringBuilder(str);
    // 第二种
    String str = "abc";
    StringBuilder sb=new StringBuilder();
    sb.append(str)
    
    • StringBuilder -> String
    // 第1种
    StringBuilder sb=new StringBuilder();
    sb.toString();
    // 第2种
    StringBuilder sb=new StringBuilder();
    String str = new String(sb);
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java是一门非常流行的编程语言,它在现代软件开发扮演着至关重要的角色。在JavaStringStringBuilder以及StringBuffer是三个常用的字符串型。 首先,StringJava最常用的字符串型之一。它是一个不可变字符串,一旦创建就无法修改。在JavaString是用双引号引起来的字符序列,例如:"Hello World"。由于String对象不可修改,因此它不适合使用在需要频繁修改字符串的场景下。 其次,StringBuilderStringBufferJava另外两种可变字符串型。与String不同,StringBuilderStringBuffer可以修改已经存在的字符串。StringBuilder是线程不安全的,适合在单线程应用使用。而StringBuffer是线程安全的,适合在多线程应用使用。 虽然StringBuilderStringBuffer都可以修改字符串,它们在内部实现上有所不同。StringBuilder在修改字符串时直接修改原有的字符串,而StringBuffer在修改字符串时会先复制一份原有的字符串,再进行修改。由于StringBuffer的实现更加安全,所以它会比StringBuilder慢一些。 在使用StringBuilderStringBuffer时,程序员需要注意的一点是尽量避免创建多余的对象。在追加字符串时,应该直接在已有的StringBuilderStringBuffer对象上进行操作,而不是每次都创建一个新对象。这样可以极大地提高程序的性能。 总之,StringStringBuilderStringBufferJava常用的三种字符串型。程序员应该根据自己的需要选择合适的型。如果字符串需要频繁修改,并且在多线程环境下进行操作,那么应该使用StringBuffer。如果字符串在单线程环境下进行操作,并且需要频繁修改,那么应该使用StringBuilder。如果字符串不需要修改,那么应该使用String

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值