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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 t_mac 于 2011-12-4 17:05 编辑

StringBuffer 和StringBuilder 不是可变字符串吗, 为啥还可以被final修饰,如果这样直接用String不就行了吗?

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1 加油!

查看全部评分

9 个回复

倒序浏览
final修饰类:表示该类不可继承
线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。
回复 使用道具 举报
是的!StringBuffer和StringBuider是可变字符序列,二者用法差不多,只不过StringBuffer是线程安全的,而StringBuider是不安全的!一般情况下使用StringBuider就可以了,除非要考虑数据安全时才用StringBuffer.  final修饰表示它们是终极类,不能被继承 ,jdk中public final class StringBufferextends Objectimplements Serializable, CharSequence已经标明了,应该不会有问题噻!
   string 是System.Text中的一个基类,它是基于引用类型而不是基于值类型的.string变量追加时 是先开辟一个空间,把现在的复制过去再加新内容,然后让变量指向这个新空间,所以如果要经常改变的内容就不要用string了选择StringBuider会好得多!
回复 使用道具 举报
final修饰变量时,变量成为常量,值不可被修改
StringBuilder是个类,用final修饰它,表示该类不能被继承。
回复 使用道具 举报
final修饰变量时,变量成为常量,值不可被修改;
StringBuffer是可变字符串没错,但是你用了final修饰他就是常量了,你就不能修改它了。他可变不代表他不能用final修饰啊。至于为什么不用String而用SB,这个就是程序员基于目标的选择了吧。
回复 使用道具 举报
本帖最后由 fly51888 于 2011-12-4 12:12 编辑

我想该提问者没有把概念搞清楚。final修饰类时表示该类不可继承;修饰变量时表示该变量是常量,即不可变;
修饰方法时表示该方法不可被重写,记住是重写哦,不是重载。
例如:final StringBuilder sb = new StringBuilder("dasfg");
该语句中的final修饰StringBuilder  表示变量sb只能指向 new StringBuilder("dasfg")创建的内存地址,
即指针的指向是不能改变的,如:sb = new StringBuilder("dsaf");就会出现不能编译的问题;但指针指向的内容还是可以改变的,
如:改变内容 sb.append("dsaf");该语法是正确的。

完整代码如下:
public class App {

        public static void main(String[] args) {
                final StringBuilder sb = new StringBuilder("dasfg");
                sb.append("dsaf");
               
                sb = new StringBuilder("dsaf");
        }
}

其中sb = new StringBuilder("dsag");行,会出现编译错误。
StringBuffer也是同理。只是StringBuffer是线程安全的,StringBuilder不是。

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
杨银川 黑马帝 2011-12-4 12:48:53
7#
恩,楼上的大神们回答的都很全了,其实简单的说,StringBuffer 和StringBuilder 是可变的,String是不变的,但都可以用final修饰,只是他们的用法不一样,所以要明确两点,一个是看声明,一个是看用途,不冲突,呵呵,个人意见,多多学习。
回复 使用道具 举报
t_mac 黑马帝 2011-12-4 17:05:14
8#
谢谢各位,学习了
回复 使用道具 举报
武超 黑马帝 2011-12-4 20:15:49
9#
类String Buffer是类似String的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容
而StringBuilder也是一样的
回复 使用道具 举报
李明 黑马帝 2011-12-8 23:04:15
10#
StringBuilder是jdk1.5开始有的新特性,是StringBuffer的简易替代。final修饰类表示类不可以被继承,和他是可变容器应该没有关系。final修饰变量才等同于常量。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马