Android基础字符串String.md
问题抛出
String这个常量在我们代码中会经常被用到,那么我们了解 String stringbuffer StringBudilder三者之间的区别吗
问题解答
- String 字符串常量,位于常量池
- stringbuffer 字符串变量 不同步适用于单线程 位于字符串缓冲区
- StringBudilder字符串变量 同步适用于多线程 位于字符串缓冲区
1. string类型的2种赋值
String s1= "222"; //直接在常量池中开辟一个地址,如果有相同的则指向同一个地址
String s2=new String("223"); //直接在堆里面新建一个
通过new关键字来生成对象是在堆区进行的,而在堆区进行对象生成的过程是不会去检测该对象是否已经存在的。因此通过new来创建对象,创建出的一定是不同的对象,即使字符串的内容是相同的。
2. 为什么已经有了String还需要有stringbuffer /StringBudilder
public class Main {
public static void main(String[] args) {
String string = "";
for(int i=0;i<10000;i++){
string += "hello";
}
}
}
public class Main {
public static void main(String[] args) {
StringBuilder stringBuilder = new StringBuilder();
for(int i=0;i<10000;i++){
stringBuilder.append("hello");
}
}
}
上面第一个是每次都会创建一个新地址用来存储,所以会导致真个遍历过程十分要创建很多次,而使用stringBuilder就只会创建一次,,大大节省时间和内存空间;
4 StringBuilder与 StringBuffer
StringBuilder:线程非安全的
StringBuffer:线程安全的
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
转载请注明来源谢谢