• String、StringBuffer、StringBuilder


    String类:底层使用char[]

    常量对象:字符串常量对象是用双引号括起的字符序列

    字符串的字符使用Unicode字符编码,一个字符占两个字节

    String类较常用构造方法:

    • String  s1 = new String();
    • String  s2 = new String(String original);
    • String  s3 = new String(char[] a);
    • String  s4 =  new String(char[] a,int startIndex,int count)

    String str  = “abc”; 与 String str1 = new String(“abc”); 的区别?

    前者引用指向字符串常量池,后者引用指向堆空间新开辟的对象。

    StringBuffer类:

    java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。

    l  很多方法与String相同,但StingBuffer是可变长度的

    StringBuilder类:

    StringBuilder 和 StringBuffer 非常类似,均代表可变的字符序列,而且方法也一样

    • String:不可变字符序列
    • StringBuffer可变字符序列、效率低、线程安全
    • StringBuilder(JDK1.5)可变字符序列、效率高、线程不安全

    String使用陷阱:

     string s="a"; //创建了一个字符串
     s=s+"b"; //
    实际上原来的"a"字符串对象已经丢弃了,现在又产生了一个字符串s+"b"(也就是"ab")。如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。如果这样的操作放到循环中,会极大影响程序的性能

    @Test
        public void test3() {
            String text = "";
            long startTime = 0L;
            long endTime = 0L;
            StringBuffer buffer = new StringBuffer("");
            StringBuilder builder = new StringBuilder("");
    
            startTime = System.currentTimeMillis();
            for (int i = 0; i < 20000; i++) {
                buffer.append(String.valueOf(i));
            }
            endTime = System.currentTimeMillis();
            System.out.println("StringBuffer的执行时间:" + (endTime - startTime));
    
            startTime = System.currentTimeMillis();
            for (int i = 0; i < 20000; i++) {
                builder.append(String.valueOf(i));
            }
            endTime = System.currentTimeMillis();
            System.out.println("StringBuilder的执行时间:" + (endTime - startTime));
    
            startTime = System.currentTimeMillis();
            for (int i = 0; i < 20000; i++) {
                text = text + i;
            }
            endTime = System.currentTimeMillis();
            System.out.println("String的执行时间:" + (endTime - startTime));
    
        }
    StringBuffer的执行时间:10
    StringBuilder的执行时间:4
    String的执行时间:1091
  • 相关阅读:
    HDU 1556 Color the ball(线段树区间更新)
    BestCoder Round #90 A.Kblack loves flag(随机数生成种子)
    Codeforces Round #377 (Div. 2) D. Exams(二分答案)
    Codeforces Round #383 (Div. 2) D. Arpa's weak amphitheater and Mehrdad's valuable Hoses(分组背包+dsu)
    HDU 1789 Doing Homework again(贪心)
    Codeforces Round #381 (Div. 2)D. Alyona and a tree(树+二分+dfs)
    Codeforces Round #381 (Div. 2)C. Alyona and mex(思维)
    Codeforces Round #381 (Div. 2)B. Alyona and flowers(水题)
    Codeforces Round #381 (Div. 2)A. Alyona and copybooks(dfs)
    UVA 1151 买还是建(最小生成树)
  • 原文地址:https://www.cnblogs.com/pjlhf/p/8667938.html
Copyright © 2020-2023  润新知