0


JAVA中StringBulider和String拼接字符串操作时的不同

StringBuilder和String拼接字符串的不同:可以从底层和字符串拼接时的效率这两方面来看。

一.StringBuilder和String的拼接操作底层

1. StringBuilder:

StringBuilder的底层是:char[ ],没有被final修饰。
初始长度:无参数的构造方法,默认容器char[]初始长度是16
扩容:新数组长度 = 旧数组的长度*2+2

1.1 StringBuilder进行拼接操作

public class Test02 {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("aa");
        sb.append("bb");
        sb.append("cc");
        System.out.println(sb);//输出aabbcc
    }
}

2. String:

String进行拼接操作时底层:在JDK1.8及以后,底层 使用了StringBuilder。
使用String的+操作,每有一个单等赋值,就会创建一个StringBuilder类型的对象。

    String是引用类型,存放在堆内存中。String的char[] 被final修饰,有“不可变性”,所以在做字符串拼接时,每次都会创建一个新对象,都要去申请内存空间,因为做大量字符串拼接时性能很差,只适合做少量的字符串拼接。

2.1 String进行拼接操作

public class Test{
 public static void main(String[] args) {
  String s= "aa";
  s= str+"bb";
 
   
  //上面这一行代码,在底层表示为
     StringBuilder sb = new StringBuilder(str);
    sb.append("bb");
    s = sb.toString();
 }

2.2 String的两种拼接操作

a. String常量与常量的拼接

public void Test(){
    String s1= "a"+"b"+"c";
    String s2="abc";  
    System.out.println(s1==s2);//结果为true
    }
    字符串常量之间的拼接操作,在编译之前就已经拼接好了。

b. 常量和变量的拼接

public void Test(){
    String s1 = "a";
    String s2="ab";
    String s3 = s1+"b";    
    System.out.println(s2==s3);//结果为false
    }
      字符串拼接操作中只要其中有一个是变量,结果就在堆中。

    变量拼接的原理是先创建一个StringBuilder类的对象,调用其append方法,拼接完成后再调用该对象的toString()方法(该方法已经被重写了)返回一个字符串对象。

二.StringBuilder和String进行拼接时的效率

    在做字符串拼接的时候,因为字符串是引用类型,新的字符串是会再内存中创建的,所以用String拼接字符串是比较耗效率的. StringBuilder类就可以提高性能。

1.StringBuilder拼接操作所用的时间

public class Test{
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("null");
        long startDate = System.currentTimeMillis();
        for (int i = 0; i < 50000; i++) {
            sb.append(i);
        }
        long endDate = System.currentTimeMillis();
        System.out.println("stringBuilder方法所用的时间:" + (endDate - startDate));
        //StringBuilder所用时间7
    }

2.String拼接操作所用的时间

public class Test{
    public static void main(String[] args) {
        String count = "null";
        long startDate = System.currentTimeMillis();
        for (int i = 0; i < 50000; i++) {
            count = count + i;
        }
        long endDate = System.currentTimeMillis();
        System.out.println("string方法所用的时间:" + (endDate - startDate));
        //String所用的时间时3669
    }
}
标签: java

本文转载自: https://blog.csdn.net/m0_70626478/article/details/124857312
版权归原作者 小李黑黑黑 所有, 如有侵权,请联系我们删除。

“JAVA中StringBulider和String拼接字符串操作时的不同”的评论:

还没有评论