基于字符串的总结

字符串( String )

总结: 在 Java 中, String  是处理字符串的核心类,位于  java.lang  包下,具有不可变性、丰富的操作方法等特性,在字符串处理场景中被广泛使用。
1. 不可变性
 String  对象一旦创建,其内容(字符序列)就不可被修改。当对  String  进行拼接、替换等操作时,实际上是创建了一个新的  String  对象,而原对象的内容保持不变。这种不可变性带来了一些优势:
- 线程安全:多个线程可以共享同一个  String  对象,无需额外的同步措施,因为不会有线程对其内容进行修改,避免了线程安全问题。
- 字符串常量池优化:字符串常量池可以存储字符串常量,当需要使用相同内容的字符串时,可以直接从常量池获取,避免了重复创建字符串对象,节省了内存空间。
- 哈希值缓存:字符串的哈希值在创建时就可以计算并缓存起来,因为字符串内容不会改变,所以在需要多次使用哈希值(如在  HashMap  等集合中作为键)时,不需要重复计算,提高了效率。
2. 创建方式
- 直接赋值: String str = "abc"; ,此时  str  指向字符串常量池中的  "abc"  对象。
- 通过  new  关键字创建: String str = new String("abc"); ,会在堆内存中新建一个  String  对象,该对象的内容是  "abc" 。
3. 常用方法
- 获取长度: int length() ,返回字符串的长度。
- 获取字符: char charAt(int index) ,返回字符串中指定索引位置的字符。
- 字符串拼接:
- 使用  +  运算符: String str = "a" + "b"; ,但由于  String  的不可变性,频繁使用  +  进行拼接会产生大量中间对象,性能较差,推荐在频繁拼接时使用  StringBuilder (单线程)或StringBuffer(多线程)
使用  concat(String str)  方法: String str1 = "a"; String str2 = str1.concat("b"); ,返回拼接后的新字符串。
字符串查找:
-  int indexOf(String str) :返回子字符串在原字符串中第一次出现的索引,若不存在则返回  -1 。
-  int lastIndexOf(String str) :返回子字符串在原字符串中最后一次出现的索引,若不存在则返回1 。
字符串截取: String substring(int beginIndex, int endIndex) ,返回从  beginIndex  到  endIndex  1  索引位置的子字符串。
字符串替换: String replace(CharSequence target, CharSequence replacement) ,将原字符串中所有的  target  子字符串替换为  replacement  子字符串,返回新的字符串。
字符串分割: String[] split(String regex) ,根据正则表达式  regex  将原字符串分割为字符串数组。
字符串转换:
- 转大写: String toUpperCase() 。
- 转小写: String toLowerCase() 。
- 去前后空格: String trim() 。
- 判断方法:
-  boolean equals(Object anObject) :比较字符串内容是否相等(重写了  Object  类的  equals  方法)。
-  boolean equalsIgnoreCase(String anotherString) :忽略大小写比较字符串内容是否相等。
-  boolean startsWith(String prefix) :判断字符串是否以指定前缀开头。
-  boolean endsWith(String suffix) :判断字符串是否以指定后缀结尾。
4. 与其他类的配合
  与  StringBuilder / StringBuffer  配合:当需要频繁修改字符串(如大量拼接、插入、删除操作)时,使用  StringBuilder (单线程,效率高)或  StringBuffer (多线程,线程安全),操作完成后可通过  toString()  方法转换为  String 。
- 与包装类配合: String  提供了  valueOf  方法,可将基本类型或包装类对象转换为字符串;包装类也提供了  parseXxx  方法(如  Integer.parseInt(String s) ),可将字符串转换为基本类型。
5. 字符串常量池
  字符串常量池是 Java 为了优化字符串存储而设计的一个内存区域。当使用直接赋值方式创建字符串时,会先检查常量池中是否存在该字符串,若存在则直接引用;若不存在则创建该字符串并放入常量池。通过  intern()  方法也可以将字符串对象放入常量池(若常量池不存在该字符串)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值