黑马程序员技术交流社区
标题:
StringBuffer 和StringBuilder 为什么能被final修饰?
[打印本页]
作者:
t_mac
时间:
2011-12-3 23:08
标题:
StringBuffer 和StringBuilder 为什么能被final修饰?
本帖最后由 t_mac 于 2011-12-4 17:05 编辑
StringBuffer 和StringBuilder 不是可变字符串吗, 为啥还可以被final修饰,如果这样直接用String不就行了吗?
作者:
王德云
时间:
2011-12-3 23:28
final修饰类:表示该类不可继承
线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。
作者:
段波
时间:
2011-12-4 00:01
是的!StringBuffer和StringBuider是可变字符序列,二者用法差不多,只不过StringBuffer是线程安全的,而StringBuider是不安全的!一般情况下使用StringBuider就可以了,除非要考虑数据安全时才用StringBuffer. final修饰表示它们是终极类,不能被继承 ,jdk中public final class StringBufferextends Objectimplements Serializable, CharSequence已经标明了,应该不会有问题噻!
string 是System.Text中的一个基类,它是基于引用类型而不是基于值类型的.string变量追加时 是先开辟一个空间,把现在的复制过去再加新内容,然后让变量指向这个新空间,所以如果要经常改变的内容就不要用string了选择StringBuider会好得多!
作者:
赵燕燕
时间:
2011-12-4 01:08
final修饰变量时,变量成为常量,值不可被修改
StringBuilder是个类,用final修饰它,表示该类不能被继承。
作者:
常登凯
时间:
2011-12-4 01:40
final修饰变量时,变量成为常量,值不可被修改;
StringBuffer是可变字符串没错,但是你用了final修饰他就是常量了,你就不能修改它了。他可变不代表他不能用final修饰啊。至于为什么不用String而用SB,这个就是程序员基于目标的选择了吧。
作者:
fly51888
时间:
2011-12-4 12:10
本帖最后由 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不是。
作者:
杨银川
时间:
2011-12-4 12:48
恩,楼上的大神们回答的都很全了,其实简单的说,StringBuffer 和StringBuilder 是可变的,String是不变的,但都可以用final修饰,只是他们的用法不一样,所以要明确两点,一个是看声明,一个是看用途,不冲突,呵呵,个人意见,多多学习。
作者:
t_mac
时间:
2011-12-4 17:05
谢谢各位,学习了
作者:
武超
时间:
2011-12-4 20:15
类String Buffer是类似String的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但
通过某些方法调用可以改变该序列的长度和内容
。
而StringBuilder也是一样的
作者:
李明
时间:
2011-12-8 23:04
StringBuilder是jdk1.5开始有的新特性,是StringBuffer的简易替代。final修饰类表示类不可以被继承,和他是可变容器应该没有关系。final修饰变量才等同于常量。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2