String、StringBuffer、StringBuilder简单理解


String:是一个使用比较多的一个类,是一个被final修饰的类,不能被继承,String对象是一个常量,被创建后,它的值不能被改变,可以使用+来连接,实际采用的是StringBuffer的append方法进行连接。


Method:

length():获取字符长度

String、StringBuffer、StringBuilder简单理解_第1张图片

isEmpty():如果为空,返回true,否则false


charAt(int index):获取String中char[]中的第offset+index字符(offset为偏移量)

String、StringBuffer、StringBuilder简单理解_第2张图片

equals(Object obj):比较两个字符串是否相等,重写了Object中的equals(Object obj)

String、StringBuffer、StringBuilder简单理解_第3张图片

contentEquals(StringBuffer):比较字符串内容是否相等

equalsIgnoreCase(String):忽略大小比较字符串


里面有一个静态内部类CaseInsensitiveComparator

startsWith(String,String):判断是否以某个字符串开头

String、StringBuffer、StringBuilder简单理解_第4张图片

endsWith(String,String):判断是否以某个字符串结束

String、StringBuffer、StringBuilder简单理解_第5张图片

indexOf(int):返回第一次出现字符的位置

substring(int):从某个位置开始到最后截取字符串


concat(String):将字符串连接在一起

String、StringBuffer、StringBuilder简单理解_第6张图片

replace(char old,char new):替换搜有old的字符,并返回一个新的字符串

String、StringBuffer、StringBuilder简单理解_第7张图片

split(String regex):按照regex对字符串进行切分,返回一个字符串数组

trim():去掉前后的空格
例子:String str = "abc"和String str = new String("abc")的区别
String str = "abc",是在字符串池中保存一个"abc"
String str = new String("abc"),是不仅在字符串池中保存一个"abc"而且在堆上new 了一个String对象
StringBuffer:一个线程安全的字符串,与String比较相似,但是通过一些方法可以
进行修改,它的所有方法都用synchronized加锁,可以从源码看出,StringBuffer中的方法
和String中的方法能类似。默认大小为16
StringBuilder:是一个可变的字符串,提供了与StringBuffer的API接口,没有用锁保护,
如果不使用在多线程情况下,比StringBuffer快,方法与StringBuffer的方法类似。

默认大小16

下面String、StringBuffer、StringBuilder的连接性能对比

String:

public class StringTest
{
	public static final int COUNT = 100000;
	
	public static void main(String[] args)
	{
		long begin = System.currentTimeMillis();
		
		String str = ""; 
		String temp = "hello";
		for(int i=0; i<COUNT; i++)
		{
			str+=temp;
		}
		long end = System.currentTimeMillis();
		System.out.println(end - begin);
	}
}
StringBuffer:

public class StringBufferTest
{
	public static final int COUNT = 100000;
	
	public static void main(String[] args)
	{
		long begin = System.currentTimeMillis();
		
		StringBuffer str = new StringBuffer(); 
		String temp = "hello";
		for(int i=0; i<COUNT; i++)
		{
			str.append(temp);
		}
		long end = System.currentTimeMillis();
		System.out.println(end - begin);
	}
}
StringBuilder:

public class StringBuilderTest
{
	public static final int COUNT = 100000;
	
	public static void main(String[] args)
	{
		long begin = System.currentTimeMillis();
		
		StringBuffer str = new StringBuffer(); 
		String temp = "hello";
		for(int i=0; i<COUNT; i++)
		{
			str.append(temp);
		}
		long end = System.currentTimeMillis();
		System.out.println(end - begin);
	}
}

                      String        StringBuffer                StringBuilder

     22886ms        13ms                           14ms

      21983ms        12ms                          14ms

22012ms       15ms                         14ms

22847ms         14ms                       14ms

23002ms         16ms                       15ms

22676ms          13ms                      14ms

22578ms           15ms                     16ms

                22326ms          14ms                      13ms

21961ms           14ms                      13ms

22446ms            15ms                      13ms

平均时间:      22471.7ms           14.1ms                    14.0ms

可以看到StringBuffer、StringBuilder比String的效率高。


你可能感兴趣的:(String、StringBuffer、StringBuilder简单理解)