String、StringBuilder、StringBuffer的详细介绍

(1)String

  1. 原理:

    String是不可变的字符串,他的底层是final修饰的字符数组

    String、StringBuilder、StringBuffer的详细介绍

  2. 常量池和堆图示

    String、StringBuilder、StringBuffer的详细介绍

  3. 案例说明问题

    String、StringBuilder、StringBuffer的详细介绍

  4. String对象赋值原理:  

    (1)常规方式:String str = "Cat";

       1. String对象赋值后,字符串常量会缓存在常量池中

       2. 如果下次创建字符对象会判断常量池中是否已经有缓存,如果有直接返回该引用给创建者。

       3. s1 == s2 ,结果为true为佐证

    (2)new的方式:new String("Cat");

       1. 如果常量池中“Cat”已存在,则会在堆内存中创建一个。如果常量池中不存在,则在常量中创建一个,堆内存创建一个()

       2. s1 == s3,结果为false佐证

  5.字符串拼接原理

    String str = "you";

    str = str + "win";

      String、StringBuilder、StringBuffer的详细介绍

 

    拼接后str直接指向"you win"。

   6. String s1 = "abc" 与String s1 = new String("abc")的区别?

    区别:

      1. String s1 = "abc",地址值指向常量池中"abc"的地址,new String("abc")地址值指向的是堆中的地址值。

2.StirngBuilder和StringBuffer

  (1)区别:

    1.StringBuffer是线程安全的(方法被同步了),StringBuilder是线程不安全的

    2.StringBuffer执行效率低,StringBuilder执行效率高

  (2)相同点:

    1.底层都是未被final修饰的字符数组

  

上一篇:Oracle10g/11g 在SUSE/RHEL上的安装与配置


下一篇:Acwing第776题(字符串移位包含问题)