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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ↙五线谱╲ 中级黑马   /  2013-12-1 16:38  /  1069 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String类为什么不能被继承?Stringbuffer和StringBulid用法的区别在哪?

评分

参与人数 1黑马币 +3 收起 理由
乔兵 + 3

查看全部评分

6 个回复

倒序浏览
本帖最后由 25343215 于 2013-12-1 16:46 编辑

一、因为Java Api已经把String 定义成了最终类final,所以不能被继承,下面是String类的修饰及实现的接口。
    public final class Stringextends Objectimplements Serializable, Comparable<String>, CharSequence
二、Stringbuffer和StringBulid的用法相同,不同之处在于StringBuffer是线程安全的、StringBuilder是线程不安全的,所以StringBuilder比StringBuffer运行效率要高。在单线程的情况下建议使用StringBuilder,在多线程同时操作一个数据时,要使用StringBuffer。


评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
String是作为基本数据类型设计的,就像int什么的一样,所以不能继承
而且是传值的而不是传引用
如果可以继承,在处理传值传引用问题和副本构造等问题的时候就会造成不必要的麻烦。
比方String是传值的,你构造了一个类,是String的子类,按道理用户自定义类都是传引用的,但是你的父类确是传值,矛盾。
StringBuffer 线程安全
StringBuilder 线程不安全


一般情况下,速度从快到慢:StringBuilder>StringBuffer>String.当需要在循环中多次使用字符串拼接时,建 议使用StringBuilder或StringBuffer.当数量级在百万级(这里可能不准确)时,StringBuilder的速度会体现出来.



评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
string 不是原始类型, 而且你能用IDEdebug的话你会发现,String实例化以后所有的属性都是final的,StringBuffer优点是线程安全的,所以可以用于多线程同步使用,缺点速度慢
StringBuilder是JAVA5才出,跟StringBuffer是等价类,只不过它是单线程使用的,所以不用于多线程使用或者说他是线程不安全的,但是速度比StringBuffer更快
回复 使用道具 举报
String类不能继承是因为JDK源码中String类是被final修饰的,被final修饰的类是最终类是不允许被继承的
对于StringBuffer和StringBuilder
StringBuffer和StringBuilder最大的不同就是StringBuffer是线程同步的,而StringBuilder是不同步的
StringBuilder是JDK 1.5之后才出现的,是一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。而当将 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用StringBuffer
StringBuilder类中的方法和StringBuffer类中的方法是一样的。在开放中,建议使用StringBuilder,效率高
回复 使用道具 举报
下次问题解决了就把类型改成提问结束!
回复 使用道具 举报
姚飞 中级黑马 2013-12-5 22:54:12
7#
。。。。。在论坛这么久终于看到你了。。。马上25分了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马