String、StringBuffer和StringBuilder

本文详细介绍了Java中的String、StringBuffer及StringBuilder的区别与用法,包括它们的特点、应用场景及常见方法,帮助开发者选择合适的字符串处理方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String代表不可变的字符序列是一个终态类不能被继承。字符串是常量声明之后不能改变其值。

      在对String类型的对象进行操作时比如使用+对字符串拼接是会产生新的对象。这就会对字符串的操作效率大大降低。当需要频繁修改字符串时,不建议用String类。

      对字符串比较时,不建议使用“==”,而是用equals()方法。在String类中,已经对equals()重新。

StringBuffer:是可变的字符序列,是线程安全的,同步的。它在对字符串进行操作时,使用的是append()方法,在字符串的后面追加字符串,但是不产生新的对象。这样对字符串操作的效率较高。在Java中如果对字符串进行大量的操作,建议使用 StringBuffer

StringBuilder:是可变的字符序列,不是线程安全的,不同步。它与StringBuffer类似,但是不是线程安全的,效率很高,用在字符串缓冲区被单个线程使用的时候,建议优先采用该类。将 StringBuilder 的实例用于多线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer

String s1 = newString(”hello”);

String s2 = newString(”hello”);

String s3 = “hel”;

String s4 = “lo”;

String s5 = s3+s4;

String s6 = “hel”;

System.out.println(s1 == s2);//false,指向的不是同一个对象。

System.out.println(s3 == s6);//true

System.out.println(s1 == s5);//false s5产生的是一个新的对象。

Java中使用(==)来比较,对于基本数据类型比较的是其变量的值,对于引用数据类型比较的是变量的引用地址。

String 类中常用的方法

intcompareTo(String value)指定者:接口 Comparable 按字典顺序比较两个字符串。如果两个字符串相等,则返回 0;如果字符串在参数值之前,则返回值小于 0;如果字符串在参数值之后,则返回值大于 0

public int length(),字符串的长度

public char charAt(int index),返回一个在字符串中索引是indexchar类型的字符。此方法可以将一个字符串转换成char类型的数组。同时,也可以使用new String(char[] ch)char类型的数组,在String声明时转换成一个字符串。

boolean startsWith(Stringvalue)   检查一个字符串是否以参数字符串开始。

booleanendsWith(String value)检查一个字符串是否以参数个字符串结束。

public int indexOf(int ch)返回指定字符ch在此字符串中第一次出现处的索引值;如果未出现该字符,则返回 -1

public int indexOf(int ch, int fromIndex) fromIndex - 开始搜索的索引

public int lastIndexOf(intch)   返回最后一次出现的指定字符在此字符串中的索引值;如果未出现该字符,则返回 -1

public int lastIndexOf(Stringstr)   返回最后一次出现的指定子字符串str在此字符串中的索引值;如果未出现该字符串,则返回 -1

public String substring(intindex)提取从位置索引index开始直到此字符串末尾的这部分子字符串

public String substring(intbeginIndex, int endIndex)提取从 beginindex开始直到endindex(不包括此位置)之间的这部分字符串

public String concat(Stringstr)  将指定字符str串联接到此字符串的结尾成为一个新字符串返回。

public String replace(charoldChar, char newChar)      返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。

public String trim() 返回字符串的副本,忽略前导空白和尾部空白

public String toUpperCase();   将此字符串中的所有字符都转换为大写

public String toLowerCase();   将此字符串中的所有字符都转换为小写

public int length()获得此字符串的长度

StringBuffer:常用的方法

StringBuffer append(Stringstr):将指定的字符串追加到此字符序列

StringBuffer insert(intoffset, String str)   将字符串str插入此字符序列指定位置中。

int length( ):确定 StringBuffer 对象的长度

void setCharAt(int pos, charch)    使用 ch 指定的新值设置 pos指定的位置上的字符

String toString( )转换为字符串形式

StringBuffer reverse()    反转字符串

StringBuffer delete(intstart, int end)   此方法将删除调用对象中从start 位置开始直到 end 指定的索引 1 位置的字符序列

StringBuffer deleteCharAt(intpos)     此方法将删除 pos 指定的索引处的字符

StringBuffer replace(intstart, int end, String s):此方法使用一组字符替换另一组字符。将用替换字符串从 start 指定的位置开始替换,直到end 指定的位置结束

StringBuilder的用法和StringBuffer的用法是一致的。了解更详细的请看官方文档,或者在线查看http://tool.oschina.net/apidocs/apidoc?api=jdk-zh Java API 文档

2017-11-30 new String的内存分配过程。



本文转自 墨宇hz 51CTO博客,原文链接:http://blog.51cto.com/zzhhz/1622972

StringStringBufferStringBuilder都是Java中用于处理字符串的类。 String是一个不可变的字符串类,也就是说一旦创建了一个String对象,它的值就不能被修改。每次对String进行修改操作时,都会创建一个新的String对象,这样会浪费内存空间时间。因此,当需要频繁地对字符串进行修改时,使用String并不高效。 StringBufferStringBuilder是可变的字符串类,它们可以被用来进行字符串的修改操作。StringBufferStringBuilder的主要区别在于StringBuffer是线程安全的,而StringBuilder是非线程安全的。这意味着在多线程环境下,如果有多个线程同时访问一个StringBuffer对象,它们是安全的;而多个线程同时访问一个StringBuilder对象时,可能会导致数据错乱。 使用StringBufferStringBuilder的场景通常是在需要频繁地对字符串进行修改的情况下。例如,在循环中拼接字符串、在递归函数中修改字符串等情况下,使用StringBufferStringBuilder可以提高性能。 如果需要将StringBufferStringBuilder转换为String对象,可以使用两种方式。一种是调用它们的toString()方法,将其转换为String对象。另一种是使用String的构造器String(StringBuffer buffer)来创建一个新的String对象,将StringBufferStringBuilder的内容复制到新的String对象中。 总结起来,String是不可变的字符串类,而StringBufferStringBuilder是可变的字符串类,适用于需要频繁修改字符串的场景。转换为String对象可以通过调用toString()方法或使用String的构造器来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值