美文网首页
String StringBuffer StringBuil

String StringBuffer StringBuil

作者: 欲火逢生 | 来源:发表于2018-08-24 22:51 被阅读0次

    常见问题1.  String和new String的区别

    2.  String和StringBuffer的转换

    3.  String StringBuffer StringBuilder的区别

    4.  ==和equal的区别

    1.  String str1 =“ABC"   和 String  str2  = new String("ABC")的区别   

    对于字符串:其对象是存储在栈中的""定义的存储在常量池中   new 确定存储在堆中

    相等的字符串在常量池中只有一份,在堆中有多份(String str在栈中  “ABC"在常量池中 new String() 在堆中)

    String str1="ABC"可能创建一个对象或者不创建对象,

    如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC")如果已经存在,str1直接reference to 这个String池里的对象。

    String str2 = new String("ABC")至少创建一个对象,也可能两个。

    因为用到new关键字,会在heap创建一个 str2 的String 对象,它的value 是 "ABC".同时,如果"ABC"这个字符串在java String池里不存在,会在java String池创建这个一个String对象("ABC").

    String str1 = new String(“abc”)        str1 != str2      (== 与equals的区别)  

    String str2 = new String("abc")   

    String str3 = "ABC"                          str3 = str4

    String str4 = "ABC"                          str3 = str4 = str5

    String str5 = "A"+"BC";  

    String和StringBuffer的转换

    String转StringBuffer:  StringBuffer sb = new StringBuffer(s);   String  s  = new String("xxx"); StringBuffer转String:  String str = sb.toString();

    String和StringBuffer  StringBuilder的区别

    执行速度:StringBulider>StringBuffer>String

    变量(常量)线程安全。。

     String                                                                  

    常量,不可变的

    在进行字符串处理时,会产生新的String对象          

    添加字符串使用“+”                                            

    线程安全

    StringBuffer    

    变量,可以修改内容

    在进行字符串处理时,不会产生新的String对象

    添加字符是使用append()

    线程安全的(多线程程序中可以使用但执行效率缓慢)

            StringBuilder

            变量,可以修改内容

    线程不安全的(单线程中的性能比StringBuffer高)

    总结:

    1.如果要操作少量的数据用 = String

    2.单线程操作字符串缓冲区 下操作大量数据 = StringBuilder

      3.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer

    4.==和equal的区别

    ==是一个运算符   equals则是string对象的方法

    ==比较的是引用类型 比较的是地址值是否相同

    equals比较的是内容是否相同(堆中的内容是否相同)

    扩展String的一种方式比StringBuffer快的多  

    e.g.      String  s  = "hello"+"you"+"hao"这种方式比StringBuffer的append()快的多,这就被jvm解析成StringBuffer对象的拼接    

    String s = "hello" String s2 = "you"   String s3 = "hao"   String s4 = s+s2+s3这种方式比StringBuffer慢的多这样jvm就规规矩矩的拼接String字符串了

    相关文章

      网友评论

          本文标题:String StringBuffer StringBuil

          本文链接:https://www.haomeiwen.com/subject/dopmyftx.html