java复习(5)—String、StringBuilder和StringBuffer

来源:互联网 发布:苹果在线软件下载 编辑:程序博客网 时间:2024/05/17 13:41

1.String类是不变字符串,StringBuffer类和StringBuilder类是可变字符串,这3种字符串都是16位的Unicode字符序列,并且这3个类都被声明为final类,因此不能被继承。

2.String str = new String("abc")创建实例的过程 

 首先在堆中(不是常量池)创建一个指定的对象"abc",并让str引用指向该对象;在字符串常量池中查看,是否存在内容为"abc"字符串对象;若存在,则将new出来的字符串对象与字符串常量池中的对象联系起来 若不存在,则在字符串常量池中创建一个内容为"abc"的字符串对象,并将堆中的对象与之联系起来。

3.String str = "abc"创建对象的过程 

首先在常量池中查找是否存在内容为"abc"字符串对象;如果不存在则在常量池中创建"abc",并让str引用该对象;如果存在则直接让str引用该对象。

4.String str1 = "abc"; String str2 = "ab" + "c"; str1==str2?

true。因为String a="ab"+"c"会在编译时期已经进行优化,等价于String a = "abc";

5.String str1 = "abc"; String str2 = "ab"; String str3 = str2 + "c"; str1==str3?

false。因为String str3 = str2 + "c"涉及到变量(不全是常量)的相加,所以会生成新的对象,其内部实现是先new一个StringBuilder,然后 append(str2),append("c");然后让str3引用toString()返回的对象。

6.StringBuilder与 StringBuffer

    StringBuilder:线程非安全的

    StringBuffer:线程安全的

    当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。

 

7.对于三者使用的总结: 1.如果要操作不改变的字符串= String

              2.单线程操作字符串缓冲区 下操作经常改变的字符串 = StringBuilder

              3.多线程操作字符串缓冲区 下操作经常改变的字符串 = StringBuffer


0 0
原创粉丝点击