String/StringBuilder/StringBuffer这3个类都能创建字符串对象,它们都继承自Object类。
其中String对象一经创建,空间固定不变,无法再向其中增、删数据。即使提供了replace()方法,但也是一个字符对应一个字符的替换。总之它的空间大小不变。
而后两者都是可变空间的String对象,因此它们都提供了append()方法、insert()方法以及delete()等修改空间数据的功能。StringBuilder类是StringBuffer类的简版,但效率更高,且它们提供的功能是完全一致的。因此在StringBuilder能满足要求时,建议使用StringBuilder类而非StringBuffer类。
它们的使用方法完全一致。因此以StringBuilder类为例。
该类用于创建String类,并提供向String数据中插入、删除数据的功能。它最主要的两个方法是append()和insert()。
构建String对象:
append()方法用于向已有String对象的尾部追加字符串数据,如果数据不是字符串类型,则会使用toString()方法转换为String类型。
insert()方法用于向指定位置处插入数据。
还有以下一些String相关的通用方法,其中如果包含start、end位置的方法,一般都不会计算end边界。
Buffer(为了方便,简写)是同步的,保证多线程安全。线程1 append()后,必须先同步才释放锁,线程2和线程3等才能继续操作(如delete)这段缓冲区中的数据。但也因为要确保数据已经同步,所以效率稍稍差一点。
Builder不保证多线程安全,线程1 append()数据后,线程2可以直接操作(如delete)这段缓存区中的数据。但因为无需确认数据是否同步,因此效率比Buffer要高一些。
它们的关键点在于是否多线程安全,对于单线程来说,它们总是安全的,此时应该采用Builder来提高效率。
几个重要的方法:
还有些其他方法:
例如,有一个int[]数组,想将该数组转换为String[]。这相当于重写一个"String[] toString(int[] arr)"方法。
例如int[]数组{1,2,3,4}???成字符串,结果为"1 2 3 4"。即将数组中的值变为字符串并使用空格分隔。