zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    SQL Server Audit监控触发器状态
    SQL Server 数据变更时间戳(timestamp)在复制中的运用
    SQL Server 更改跟踪(Chang Tracking)监控表数据
    SQL Server 变更数据捕获(CDC)监控表数据
    SQL Server 事件通知(Event notifications)
    SQL Server 堆表行存储大小(Record Size)
    SQL Server DDL触发器运用
    SQL Server 默认跟踪(Default Trace)
    SQL Server 创建数据库邮件
    SQL Server 跨网段(跨机房)FTP复制
  • 原文地址:https://www.cnblogs.com/pjlhf/p/8667938.html
Copyright © 2011-2022 走看看