Java String

来源:互联网 发布:知乎 cqy是什么意思 编辑:程序博客网 时间:2024/05/17 21:54

 String vs StringBuffer

JavaString类已经相当完善,但之所以有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的区别是,前者效率更高,但没有同步,多线程下会出错,后者多线程中进行了同步。

阅读(69) | 评论(0) | 转发(0) |
0

上一篇:Java大数计算

下一篇:Java正则表达式

相关热门文章
  • JDK1.6官方下载_JDK6官方下载_...
  • MyEclipse6.5下载及注册码...
  • Eclipse+MyEclipse的配置
  • Eclipse 插件安装、升级和卸载...
  • 最新版SWT Designer 6.0 安装,...
  • ChinaUnix & ITPUB社区12周年...
  • ssh连接出现以下提示,求解...
  • 如何扩展MYSQL
  • 准备做一个大型门户,用户什么...
  • gbk or utf8
给主人留下些什么吧!~~
原创粉丝点击