字符串类型
- 不可变类型:一旦创建,值就不会改变
- fianl修饰类不能继承,不能被重写,修饰char类型后,地址不可变,内容可变,没有具体方法修改内容,保证不可变性
常用方法
- 长度: int length = str1.length(); // 获取字符串长度
- 拼接:
- String str4 = str1.concat(", World!"); // 使用 concat 方法
- String str3 = str1 + ", World!"; // 使用 + 运算符
- 子串: String subStr = str1.substring(0, 5); // 获取子串 "Hello"
- 查找:
- int index = str1.indexOf('o'); // 查找字符 'o' 的位置
- int lastIndex = str1.lastIndexOf('o'); // 查找字符 'o' 的最后一次出现的位置
- 比较:
- boolean isEqual = str1.equals(str2); // 比较两个字符串是否相等
- int compareResult = str1.compareTo(str2); // 按字典顺序比较两个字符串
- 大小写转换:
- String upperStr = str1.toUpperCase(); // 转换为大写
- String lowerStr = str1.toLowerCase(); // 转换为小写
- 去除空格: String trimmedStr = str1.trim(); // 去除字符串两端的空格
- 替换: String replacedStr = str1.replace('H', 'J'); // 将 'H' 替换为 'J'
字符串池
为了优化性能,Java 在内存中维护了一个字符串池。当使用字符串字面值创建字符串时,Java 会先检查池中是否存在相同的字符串,如果存在则返回池中的字符串对象,而不会创建新的对象。这使得相同的字符串字面值在内存中只有一个副本。
String str1 = "Hello";
String str2 = "Hello";
boolean isSame = (str1 == str2); // true,str1 和 str2 引用同一个字符串池中的对象
提升字符串拼接效率的类
- StringBuffer:StringBuffer 是线程安全的可变字符串类。它的所有方法都是同步的(synchronized),这意味着在多线程环境中使用 StringBuffer 是安全的,但这也导致了其性能比StringBuilder 略低。
- StringBuilder:StringBuilder 是非线程安全的可变字符串类。它的设计与 StringBuffer 类似,但不保证线程安全。因此,在单线程环境中,StringBuilder 比 StringBuffer 更快。