Java String

 String vs StringBuffer

Java的String类已经相当完善,但之所以有StringBuffer类的出现是为了弥补String类在其特殊内存机制下在连接操作中出现的确定。

a)         String的内存机制概括起来是“一次投入,终身回报”。JVM在运行时,将内存分为堆和栈,前者存放创建时的对象,后者存放方法调用过程中的局部变量或引用,而堆中又开辟了一块内存,称之为字符串常量池,用来存放特定的字符串对象。在创建字符串时,首先查看字符串常量池中是否存在内容相同的字符串独享,若没有,则新建一对象,否则用该引用指向该对象。由此,在字符串常量池中的字符串对象永远不变,当我们实际进行形如

a)         String s1 = “a”;

b)         String s2 = “b”;

c)           s1 = s1 + s2;

的操作时,实际是将s2的内容追加到s1的内容组成新的内容,查找字符串常量池中是否存在与新内容相同的字符串,若有,则将s1引用指向该对象,否则新建之,再将s1指向新对象。由此带来一好处,不管字符串对象多长,其比较速度一样,但在一些大量需要连接字符串的代码中,其性能将大幅下降,因为其中创建了大量无用的中间对象,如:

a)         String s =””;

b)         For(int i = 0 ; i < 100; i++){

c)            S = s + i ;

d)         }

连接过程中出现很多中间对象,每执行一次连接操作便诞生一个新对象丢弃一个老对象,造成性能急剧下降。

b)            StringBuffer在连接操作时,不产生冗余中间对象,但其创建语法只能通过new操作符进行创建,其append,insert,delete方法可以对StringBuffer对象进行指定操作,然后返回StringBuffer对象,通过toString返回字符串对象。

c)             还有一种称之为 StringBuilder 的类,其用途和 StringBuffer 相同,用于字符串的连接和修改,它和 StringBuffer 的区别是,前者效率更高,但没有同步,多线程下会出错,后者多线程中进行了同步。

<script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/buttonLite.js#style=-1&uuid=&pophcol=3&lang=zh"></script> <script type=text/javascript charset=utf-8 src="http://static.bshare.cn/b/bshareC0.js"></script>
阅读(69) | 评论(0) | 转发(0) |
0

上一篇:Java大数计算

下一篇:Java正则表达式

给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值