首页 > 编程语言 > 详细

Java千百问_06数据结构(020)_String是什么

时间:2016-05-22 10:59:57      阅读:209      评论:0      收藏:0      [点我收藏+]

点击进入_更多_Java千百问

1、String是什么

java.lang.String类表示字符串常亮,所谓字符串,就是一组字符组成的字符集合。它有以下几个特点:

String是不可变的对象
每次对String进行改变的时候,其实都等同于生成了一个新的String对象,然后将指针指向新的String对象(若不使用new构造,实际是从堆中的String池查找是否已经再存该字符串,若有则直接指向;若没有则先将该字符串放入String池,然后在指向)。
所以经常改变内容的字符串最好不要用String ,每次生成对象都会对系统性能产生影响(特别当堆中无引用对象多了以后,JVM的垃圾回收GC就会开始工作,性能会受影响)。

了解垃圾回收看这里:[java垃圾回收机制是什么][2]
了解String在内存中如何储存看这里:String在内存中如何存放

String与StringBuffer效率比较
而在某些特别情况下,String对象的改变速度并不会比StringBuffer对象慢,而特别是以下的字符串对象生成中,String效率是远要比StringBuffer快的:

String s1 = "hello " + "world" ;
StringBuffer sb = new StringBuffer( "hello " ) . append( "world" );

你会惊讶的发现,生成String对象的速度简直太快了,而这个时候StringBuffer居然速度上根本一点都不占优势。
其实这是JVM的一个把戏,在JVM眼里,这个

String s1 = "hello " + "world" ;

等效于:

String s1 = "hello world" ;

所以不需要太多的时间了。但这里要注意,如果你的字符串是来自其他String对象的话,这时候JVM会规规矩矩创建若干对象,例如:

String s2 = "hello " ;
String s3 = "world" ;
String s1 = "hello world" ;

String还有两个类似的常用类,StringBuffer/StringBuilder,了解他们的使用和区别看这里:StringBuffer/StringBuilder有什么区别

Java千百问_06数据结构(020)_String是什么

原文:http://blog.csdn.net/ooppookid/article/details/51473710

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!