String与StringBuilder
String
- 不可变性:String对象一单创建,无法修改,其值夜无法改变,每次对String操作都会创建一个新的String的对象,,而不是修改原有的对象
- 常量池:javat通过字符串常量池来重用相同值的String对象,节省空间,提高性能,
- 丰富的方法;提供许多的方法
new String("Hello Word ")
在使用时,会创建两个对象,都存在堆中
- 首先,在堆内存中创建一个新的String对象用来传入字符串参数,并存储在常量池中复用
- 然后使用new String 创建第二个String对象,式独立的,不会重用字符串常量池的字符串,
String的常用方法
- length():返回字符串的长度(字符个数)
- charAt(int index):返回指定索引位置的字符
- substring( int beginIndex):返回指定索引开始到字符末尾的子字符串
- substring( int beginIndex ,int endIndex)返回指定范围内的子字符串
- equals(Object o):比较字符串是否与指定对象相等
- equalsIgnoreCase(String str):比较字符串是否相等,忽略大小写
- concat(String str):将指定的字符串连接到原始字符串的末尾
- compareTo(String str):按字典顺序比较字符串。
- indexOf(String str):返回指定字符串在原始字符串中第一次出现的索引位置。
- lastIndexOf(String str):返回指定字符串在原始字符串中最后一次出现的索引位置。
- startsWith(String prefix):判断字符串是否以指定的前缀开头。
- endsWith(String suffix):判断字符串是否以指定的后缀结尾。
- toUpperCase():将字符串转换为大写字母形式。
- toLowerCase():将字符串转换为小写字母形式。
- valueOf():将其他类型的数据转换为字符串。
- trim():去除字符串两端的空格。
- replace(char oldChar, char newChar):替换字符串中的字符。
- split(String regex):将字符串按指定的正则表达式拆分为字符串数组。
- contains(CharSequence sequence):判断字符串是否包含指定的字符序列。
- isEmpty():判断字符串是否为空字符串。
StringBuilder
StringBuilder是Java中的一个类,用于高效地进行字符串操作。它属于可变字符串类,用于处理频繁的字符串拼接、插入和修改操作。与不可变的String类不同,StringBuilder允许对字符串进行原地修改,避免了频繁创建新的字符串对象,从而提升了性能。
- 可变性:StringBuilder对象的值可以被修改。可以通过添加、插入、替换和删除字符来修改字符串的内容,而不会创建新的对象。这使得StringBuilder在需要频繁修改字符串的场景中非常有用。
- 高效的字符串拼接:通过append()方法,可以将字符串片段追加到StringBuilder对象的末尾。这种方式避免了使用+操作符进行字符串拼接时创建大量中间字符串的问题,从而提高了性能。
StringBuilder常用方法
首先需要创建StringBuilder对象:
public StringBuilder(): 创建一个空的StringBuilder对象。
public StringBuilder(String str): 使用指定的字符串初始化StringBuilder对象。
StringBuilder的常用方法有:
append(): 在尾部追加内容。
delete(): 删除指定范围内的内容。
replace(): 替换指定范围内的内容。
insert(): 在指定位置插入内容。
reverse(): 反转字符串。
StringBuilder的许多方法返回值都是StringBuilder类型。由于方法返回了对象本身的引用,可以通过链式调用方式简洁地书写代码:
StringBuilder buf = new StringBuilder();
buf.append("ibm").append("java")
.insert(3, "oracle")
.replace(9, 13, "JAVA");
System.out.println(buf.toString());
通过链式调用,可以连续执行多个方法操作,从而实现对字符串的快速处理。最后通过toString()方法获取最终的字符串结果,并进行输出。
String和StringBuilder区别
String和StringBuilder是Java中用于处理字符串的两个类,它们在以下几个方面有所区别:
*可变性:String是不可变类,即一旦创建,其值不可更改。每次对String进行修改时,都会创建一个新的String对象。而StringBuilder是可变类,允许对字符串进行原地修改,避免了频繁创建新的对象。 *
性能:由于String的不可变性,每次对String进行拼接、替换或删除操作时,都会创建新的String对象,导致内存的频繁分配和回收,性能较低。而StringBuilder允许原地修改字符串,避免了这种性能损耗,在大量字符串操作时通常比String效率更高。
使用场景:String适用于不需要频繁修改字符串内容的情况,例如字符串的比较、提取子串等。StringBuilder适用于需要频繁进行字符串拼接、插入和修改的情况,例如动态生成字符串、字符串的动态拼接等。
总结起来,String适用于不需要修改的字符串操作,而StringBuilder适用于需要频繁修改字符串的操作,根据具体的需求选择合适的类可以提高代码的性能和效率。