String,StringBuffer、StringBuilde 详细介绍

JAVA中用于处理字符串常用的有三个类:

java.lang.String、

java.lang.StringBuffer、

java.lang.StringBuilder,

这三者的共同之处都是final类,不允许被继承,美国服务器,这主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着的,且考虑到防止其中的参数被修改影响到其它的应用。

StringBuffer与 StringBuilder两个基本上差不多,只是StringBuffer是线程安全,可以不需要额外的同步用于多线程中;

StringBuilder是非同步,运行于多线程中就需要使用着单独同步处理,但是速度就比StringBuffer快多了;二者之间的共同点都可以通过append、insert进行字符串的操作。

String 实现了三个接口:Serializable、Comparable<String>、CharSequence,

而StringBuffer及StringBuilder只实现了两个接口 Serializable、CharSequence,相比之下 String 的实例可以通过 compareTo 方法进行比较,而其它两个就不可以。

以下是JDK中对String、StringBuffer、StringBuilder的详细介绍:

String:

String类代表字符串。Java程序中的所有字符串字面值(如”abc”)都作为此类的实例实现。

字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为String对象是不可变的,所以可以共享。例如:

String str = “abc”;

等效于:

char data[] = {‘a’, ‘b’, ‘c’};

String str = new String(data);

下面给出了一些如何使用字符串的更多示例:

System.out.println(“abc”);

String cde = “cde”;

System.out.println(“abc” + cde);

String c = “abc”.substring(2,3);

String d = cde.substring(1, 2);

String类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。大小写映射基于Character类指定的Unicode标准版。

Java语言提供对字符串串联符号(”+”)以及将其他对象转换为字符串的特殊支持。字符串串联是通过StringBuilder(或StringBuffer)类及其append方法实现的。字符串转换是通过toString方法实现的,该方法由Object类定义,并可被Java中的所有类继承。有关字符串串联和转换的更多信息,请参阅Gosling、Joy和Steele合著的The Java Language Specification。

除非另行说明,否则将null参数传递给此类中的构造方法或方法将抛出NullPointerException。

String表示一个UTF-16格式的字符串,其中的增补字符由代理项对表示(有关详细信息,请参阅Character类中的Unicode字符表示形式)。索引值是指char代码单元,因此增补字符在String 中占用两个位置。

String类提供处理Unicode代码点(即字符)和Unicode代码单元(即char值)的方法。

StringBuffer:

线程安全的可变字符序列。一个类似于String的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。

可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。

StringBuffer上的主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符添加或插入到字符串缓冲区中。append方法始终将这些字符添加到缓冲区的末端;而insert方法则在指定的点添加字符。

例如,如果z引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用z.append(“le”)会使字符串缓冲区包含“startle”,而z.insert(4, “le”)将更改字符串缓冲区,使之包含“starlet”。

通常,如果sb引用StringBuilder的一个实例,则sb.append(x)和sb.insert(sb.length(), x)具有相同的效果。

只要发生有关源序列(如在源序列中添加或插入)的操作,该类就只在执行此操作的字符串缓冲区上而不是在源上实现同步。

蚁穴虽小,溃之千里。

String,StringBuffer、StringBuilde 详细介绍

相关文章:

你感兴趣的文章:

标签云: