微信扫一扫

028-83195727 , 15928970361
business@forhy.com

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

String是什么,String基本类型,String内存,String使用,字符串Buffer2016-06-10

点击进入_更多_Java千百问

1、String是什么

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

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

了解垃圾回收看这里:java垃圾回收机制是什么
了解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有什么区别