CharSequence与String以及stringbuffer与stringbuilder
前言:
本文是由《TextView中的图文共存问题》延伸出来的知识点讲解;原文地址:《TextView图文共存问题》
1. CharSequence与String都能用于定义字符串,但CharSequence的值是可读可写序列,而String的值是只读序列。
2.CharSequence 这是一个接口,代表的是一个有序字符集合。
3.String 和 CharSequence 关系:
②. CharSequence是一个接口,它只包括length(), charAt(int index), subSequence(int start, int end)这几个API接口。除了String实现了CharSequence之外,StringBuffer和StringBuilder也实现了CharSequence接口。
4.Android - CharSequence和String的比较和转换:
String转换CharSequence:cs = str;
CharSequence和String类型的比较:cs.toString().equal(str);
5.stringbuffer与stringbuilder的区别:
1. 在执行速度方面的比较:StringBuilder > StringBuffer
2. StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,不像String一样创建一些对象进行操作,所以速度就快了。
3. StringBuilder:线程非安全的
StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
对于三者使用的总结:1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
6.string与stringbuffer:
①. StringBuffer sb = new StringBuffer(); sb.append("abc").append("123");//sb是可变的,自身可变
②. String str = ""; str= "abc" + "123";//相当于 str = str1 + str2;
7.CharSequence与String对getText()的使用:
安卓常用的控件的getText()方法不就是返回一个CharSequence值,而我们用的时候不都是:
String value = v.getText().toString();//把CharSequence转化为String
CharSequence ch = v.getText();
参考资料:
①. Java String之String和CharSequence、StringBuilder和StringBuffer的区别:点击打开链接
②. Android - CharSequence和String的比较和转换:点击打开链接
③. stringbuffer与stringbuilder的区别:点击打开链接