java基础

String、StringBuffer、StringBuilde

2020-05-07  本文已影响0人  wayne777

区别

1,从运行速度上看:StringBuilder > StringBuffer > String

2,从长度上看:StringBuilder 和StringBuffer 是字符串变量,长度可变,String 创建后不可更改

3,从线程安全上看:StringBuilder是线程不安全的,StringBuffer是线程安全的 

4,使用区别

    当操作String时,需要不断创建和回收对象

    String 适合少量字符串操作情况

    StringBuffer:适用于多线程在字符缓冲区进行大量操作情况

    StringBuilder:适用于在单线程在字符缓冲区进行大量操作的情况

深入

引用:https://www.jianshu.com/p/8fbd55d6e369

String 特点:

1.String不可继承,支持序列化,支持自然排序

     String 是由final修饰的类,且实现了Serializable和Comparable接口

2.String底层实现用的final char[ ]

3.String可以采用直接赋值的形式进行操作,这一点像基本数据类型的赋值操作一样。范例:String str = "hello";

4.String重写了equals()方法,变成内容的比较而不是地址

5.String类的设计使用了一个共享设计模式: 

    在JVM中,为了减少字符串对象的重复创建,维护了一块特殊的内存空间,这块内存就被称为字符串常量池

6.字符串一旦创建,对他任何操作都不能改变

String a="abc"

    先去常量池中遍历,如果有"abc"字符串,则直接返回当前地址,如果没有,则先在常量池中创建"abc",然后返回其地址,此过程创建零个或一个对象

String a=new String("abc"))

    先在池中遍历,,如果有"abc"字符串,则进行下一步,如果没有,则先在常量池中创建"abc",然后在堆中创建String对象,指向池中"abc"的地址,此过程创建一个或两个对象,一定会创建对象

题目:

    String s1="abcd";                           //在常量池创建"abcd"

    String s2="abcd";                           //引用常量池中的"abcd"

    String s3=new String("abcd");        //堆中创建String对象 s3  值指向常量池中的"abcd"

    String s4=new String("abcd");       //堆中创建String对象 s4  值指向常量池中的"abcd"

    System.out.println(s1==s2);        //true

    System.out.println(s1==s3);        //fallse

    System.out.println(s1==s4);        //fallse

    System.out.println(s3==s4);        //fallse

上一篇 下一篇

猜你喜欢

热点阅读