A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhouxp3323 黑马帝   /  2012-3-24 13:08  /  2574 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

StringBuilder和StringBuffer的区别是什么啊?好像都差不多吧?

9 个回复

倒序浏览
本帖最后由 李成 于 2012-3-24 13:42 编辑

单线程用StringBuilder效率高,多线程用StringBuffer安全。
回复 使用道具 举报
StringBuffer线程同步,安全,效率低,多线程使用
StringBuilder线程不同步,不安全,单线程效率高
回复 使用道具 举报
StringBuffer 对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append,insert,reverse等方法可以改变这个字符串的字符序列。线程安全的
StringBuider类,和StringBuffer基本相似,主要是StringBuider没有实现线程完全功能
回复 使用道具 举报
String字符串常量
StringBuilder字符串变量(非线程安全)
StringBuffer字符串变量(线程安全)
回复 使用道具 举报
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。

StringBuilder 主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串生成器中。append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符。在大多数实现中,它比 StringBuffer 要快。将StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用StringBuffer。
回复 使用道具 举报
郑涛 中级黑马 2012-3-24 14:45:26
7#
StringBuffer 与StringBuilder
从 JDK 5.0 开始,为StringBuffer类增添了一个单个线程使用的等价类,即 StringBuilder 。与StringBuffer相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
回复 使用道具 举报
袁野 黑马帝 2012-3-24 19:07:30
8#
都是字符串缓冲区 ,看你的需要用哪个
回复 使用道具 举报
冯建鹏 黑马帝 2012-3-24 22:29:00
9#
说到StringBuilder和StringBuffer的区别,顺便把String也加上吧。。
1. 概述:
        1.1 String

                  字符串常量,但是它具有不可变性,就是一旦创建,对它进行的任何修改操作都会创建一个新的字符串对象。

        1.2 StringBuffer

                  字符串可变量,是线程安全的,和StringBuilder类提供的方法完全相同。如果查看java的源代码(即java安装目录的src.zip文件),就会发现它和StringBuilder类的方法的区别就是,在每个方法前面添加了"synchronized",保证其是线程安全的。

        1.3 StringBuilder

                  字符串可变量,是线程不安全的。在java API中指明:这个类是在JDK 5才开始加入的,是StringBuffer的单线程等价类。(其他两个String和StringBuffer类,都是JDK 1.0开始)

2. 主要方法:
        java API提供了处理字符串的绝大多数方法,所以我们在写程序的时候如果需要处理字符串,一定要先查找API,查查是不是已经提供了相应的方法。个人认为这是考察一个程序员是否合格的一个初级标准。

        2.1 String

                  检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写等等。
2.2 StringBuffer

                  与String类提供的方法大同小异,有些只是名称的小小区别。由于StringBuffer类主要用来处理经常变动的字符串,所以用的最多的方法是append、insert和delete方法,java API 已经重载append和insert方法,从而支持对几乎所有基本数据类型的操作。方法详细介绍参见java API。

        2.3 StringBuilder

                  提供的方法与StringBuilder类完全相同,只是每个方法前都添加了synchronized关键字来保证线程的同步。但是由于StringBuilder不执行同步操作,所以速度更快。
3如何选择
        到这里,它们之间的区别我们应该已经明白了,这里画蛇添足一下在编程的时候到底应该如何选择。

        总结区分的原因:String是字符串常量,一旦创建就不能修改;StringBuffer和StringBuilder是字符串可变量,可以修改,但是StringBuffer是线程安全的,StringBuilder是线程不安全的。

        选择方法:
              如果很少修改,使用String,毕竟它最简单;
              如果经常修改,且是单线程,使用StringBuilder;(实际上,StringBuilder是我们最常用的,因为我们经常需要修改字符串,并且我们的程序多是单线程的)
              如果经常修改,且是多线程,使用StringBuffer。
回复 使用道具 举报
说到StringBuilder和StringBuffer的区别,顺便把String也加上吧。。
1. 概述:
        1.1 String

                  字符串常量,但是它具有不可变性,就是一旦创建,对它进行的任何修改操作都会创建一个新的字符串对象。

        1.2 StringBuffer

                  字符串可变量,是线程安全的,和StringBuilder类提供的方法完全相同。如果查看java的源代码(即java安装目录的src.zip文件),就会发现它和StringBuilder类的方法的区别就是,在每个方法前面添加了"synchronized",保证其是线程安全的。

        1.3 StringBuilder

                  字符串可变量,是线程不安全的。在java API中指明:这个类是在JDK 5才开始加入的,是StringBuffer的单线程等价类。(其他两个String和StringBuffer类,都是JDK 1.0开始)

2. 主要方法:
        java API提供了处理字符串的绝大多数方法,所以我们在写程序的时候如果需要处理字符串,一定要先查找API,查查是不是已经提供了相应的方法。个人认为这是考察一个程序员是否合格的一个初级标准。

        2.1 String

                  检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写等等。
2.2 StringBuffer

                  与String类提供的方法大同小异,有些只是名称的小小区别。由于StringBuffer类主要用来处理经常变动的字符串,所以用的最多的方法是append、insert和delete方法,java API 已经重载append和insert方法,从而支持对几乎所有基本数据类型的操作。方法详细介绍参见java API。

        2.3 StringBuilder

                  提供的方法与StringBuilder类完全相同,只是每个方法前都添加了synchronized关键字来保证线程的同步。但是由于StringBuilder不执行同步操作,所以速度更快。
3如何选择
        到这里,它们之间的区别我们应该已经明白了,这里画蛇添足一下在编程的时候到底应该如何选择。

        总结区分的原因:String是字符串常量,一旦创建就不能修改;StringBuffer和StringBuilder是字符串可变量,可以修改,但是StringBuffer是线程安全的,StringBuilder是线程不安全的。

        选择方法:
              如果很少修改,使用String,毕竟它最简单;
              如果经常修改,且是单线程,使用StringBuilder;(实际上,StringBuilder是我们最常用的,因为我们经常需要修改字符串,并且我们的程序多是单线程的)
              如果经常修改,且是多线程,使用StringBuffer。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马