String, StringBuffer StringBuilder的区别

作者&投稿:大季陶 (若有异议请与网页底部的电邮联系)
String Stringbuffer和StringBuilder的区别?~

ava.lang.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) 具有相同的效果。

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

每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

java.lang.StringBuilder一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

在 StringBuilder 上的主要操作是 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) 具有相同的效果。 每个字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区。如果内部缓冲区溢出,则此容量自动增大。

将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。

String:是被final修饰的类,是不可变类,也就是说我们通常定义的String类型的变量的值是不可改变的
StringBuffer:是线程安全的可变的字符序列
StringBuilder:是非线程安全的可变的字符序列,它和StringBuffer基本上差不多吧,在不涉及多线程使用时用StringBuilder会更快些
总体来说就是:String不可变,StringBuffer和StringBuilder可变,线程同步时用StringBuffer,非同步用StringBuilder
以上是我的个人理解

ava.lang.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) 具有相同的效果。

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

每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。

java.lang.StringBuilder一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

在 StringBuilder 上的主要操作是 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) 具有相同的效果。 每个字符串生成器都有一定的容量。只要字符串生成器所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区。如果内部缓冲区溢出,则此容量自动增大。

将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。


武鸣县15831481080: 说明string和stringbuffer的优缺点,并举例说明? -
钱任复方: 1. String 类 String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间. String a = "a"; //假设a指向地址0x0001 a = "b";//重新赋值后a指向地址0x0002,但0x0001地址...

武鸣县15831481080: string和stringbuffer类的区别 -
钱任复方: String与StringBuffer的区别 简单地说,就是一个变量和常量的关系.StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象. StringBuffer 的内部实现方式和String不同,StringBuffer在进行字符串...

武鸣县15831481080: string和stringbuffer有什么区别 -
钱任复方: String是一种强不变类型,它的值一旦被赋予之后,在内存中的相应位置上的值就不会变化了.即便你用String的方法:concat(String str)和replace(char oldChar, char newChar)等等,所返回的值都是新创建的一个String类型,而不是在原内存地址...

武鸣县15831481080: String 和 StringBuffer的特点和区别? -
钱任复方: String 是定长的字符串;(例如:String str = "HelloWorld";)那么他的长度就是固定了的.StringBuffer是可变长的字符串;例: StringBuffer sbf = new StringBuffer(); //其长度不是固定的,可以随时往这个StringBuffer的对象中加入字符串的拼接,拼接如下: sbf.append("xxxxxxxx"); "xxxxxxx"为你要拼接的内容. 回答完毕,Ps:纯属原创,谢绝转载、希望能帮到你!

武鸣县15831481080: String 和StringBuffer的区别 -
钱任复方: STRING的长度是不可变的,STRINGBUFFER的长度是可变的.如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法 ...........................

武鸣县15831481080: String和StringBuffer的区别 -
钱任复方: 简单说就是StringBuffer对象的内容可以修改,String对象一旦产生后就不可以被修改,重新赋值其实是重新生成了一个新的对象.StringBuffer在进行字符串处理时,不生成新的对象,String类中则不是,所以在内存使用上要比String类节省开销,尤其是大量字符串操作的时候.所以如果经常需要对一个字符串进行修改,例如在循环中对字符串进行追加、删除等操作,强烈建议使用StringBuffer,而不是String.例如:String s = "abc"; s = s + "d"; System.out.print(s);// result : abcd 此时s是一个新的对象.

武鸣县15831481080: String,StringBuffer和StringBuilder的区别 -
钱任复方: 可以简单地理解成 String 是不可变的字符串 StringBuffer是定义可变的字符串 StringBuilder 已被StringBuffer 取代!

武鸣县15831481080: JAVA的String类和StringBuffer两个类的区别 -
钱任复方: StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类. 所以在实际使用时,如果经常需要对一个字符串进...

武鸣县15831481080: StringBuffer和String的区别 -
钱任复方: String 操作后都是产生一个新的字符串对象,而stringBuffer操作的始终是原对象, 当字符串长度大时,并且多字要进行字符串连接时,使用 StringBuffer 性能要高许多. 而且 StringBuffer 是线程同步的.

武鸣县15831481080: string 和 stringbuffer 的用法有什么区别?
钱任复方: String 是不可变的字符串 StringBuffer 是可变的字符串 如 String s1 = "String"; StringBuffer s2 = new StringBuffer("String"); 这时候s1就不能够改变了 除非他指向另外一个字符串 而s2却能通过它的一些方法来改变 s2.append("Buffer") 像这时候s2 = "StringBuffer" StringBuffer类中有增 删 改 字符串的函数 但String 没有 所以他们之间的区别就是 一个能改变 另外一个不能改变

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网