首页 > 编程语言 >java学习日记20230406-StringBuilder,StringBuffer,String比较

java学习日记20230406-StringBuilder,StringBuffer,String比较

时间:2023-04-04 23:22:29浏览次数:49  
标签:java String 20230406 System StringBuffer starttime StringBuilder endtime

StringBuffer,StringBuilder,String比较:

 

  1. StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法相同;
  2. String:不可变字符序列,效率低,但是复用率高;
  3. StringBuffer:可变字符序列,效率较高,线程安全;
  4. StringBuider:可变字符序列,效率极高,线程不安全

  

String使用注意说明:

  String s = "a";//创建了一个字符串

  s+="b";//实际傻姑娘原来的a字符串的对象已经丢弃了,现在又产生了一个字符串s+"b".如果多次执行这些改变串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。

  如果这样的操作放到循环中,会极大影响程序的性能。效率上StringBuilder》StringBuffer〉String

StringBuffer,StringBuilder,String比较

public class BuilderVSBufferVSString {
    public static void main(String[] args) {


        long starttime = 0;
        long endtime = 0;

        StringBuilder stringBuilder = new StringBuilder();
        starttime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            stringBuilder.append(i);
        }
        endtime=System.currentTimeMillis();
        System.out.println("Builder Time = "+(endtime-starttime));//13


        StringBuffer stringBuffer = new StringBuffer();
        starttime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            stringBuffer.append(i);
        }
        endtime=System.currentTimeMillis();
        System.out.println("Buffer Time = "+(endtime-starttime));//47

        String text = "";
        starttime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            text = text + i;
        }
        endtime=System.currentTimeMillis();
        System.out.println("String Time = "+(endtime-starttime));//8561


    }
}

总结:

  1.如果字符串存在大量的修改操作,一般使用StringBuffer和StringBuilder

  2.如果字符串存在大量的修改操作,并在单线程情况,使用StringBuilder

  3.如果字符串存在大量的修改操作,并在多线程情况,使用StringBuffer

  4.如果我们字符串很少修改,被多个对象引用,使用String,比如配置信息

标签:java,String,20230406,System,StringBuffer,starttime,StringBuilder,endtime
From: https://www.cnblogs.com/DragonJack/p/17288218.html

相关文章

  • java学习日记20230406-StringBuilder类
    StringBuilder类一个可变的字符序列,此类提供一个与StringBuffer兼容的Api,但不保证同步。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类,因为在大多数实现中,他比StringBuffer要快----StringBuilder不是线程安全的在S......
  • JavaScript对象
    ArrayString自定义对象 ArrayJavaScriptArray对象用于定义数组定义: var变量名=newArray(元素列表);//方式一var变量名=[元素列表];//方式二 访问arr[索引]=值;arr[0]=1;注意:JS类似于Java集合,长度,类型都可变 Ps.length数组中元素的个数......
  • Java
    Java一、转义字符\t:一个制表符,实现对齐功能\n:换行\\:一个\,其他单引号、双引号同\r:一个回车System.out.print("学习\r北京");ps:回车后,回到行首替换输入二、注释单行注释多行注释(禁止套娃)文档注释javadoc-d生成后的路径-author-version文件名......
  • java学习日记20230405-StringBuffer类
    StringBuffer类java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删很多方法与String相同,但StringBuffer是可变长度的StringBuffer是一个容器StringBuffer是final类实现了Serializable接口,可以保存到文件或网络传输继承了抽象类AbstractStringBuiderAbstra......
  • Java笔记(8) 异常和错误
    异常的简单分类检查性异常:最具代表性的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如用户要打开一个不存在的文件,一个异常就发生了,这些异常在编译时不能被简单的忽略。运行时异常:运行时异常是可能被程序员避免的异常,与检查性异常相反,运行时异常可以在编译时......
  • Java中的 Stream 流02
    1、流的创建1.1、使用集合对象的stream()方法创建流数组对象,创建流时需要使用Arrays.stream()方法;集合类对象,可以在对象后直接使用.stream()方法转换为流;Map对象不能直接转换为流,但是可以对Map对象中的key、value、entrySet分别转换为流方便后续使用。//数组对象in......
  • Mac | 解决 MacOS 配置 Maven 出现的 Java_Home Error
    1.错误信息2.解决方案2.1对于Windows系统下解决方案https://blog.csdn.net/frankarmstrong/article/details/69945774,在MacOS下并不奏效2.2对于MacOS系统下的解决方案code~/.bash_profile#使用VSCode打开环境变量文件#配置Java_Home内容exportJAVA_HOME=$......
  • java -- Object类和String类
    Object类java.lang.Object类是Java语言中的根类,每个类都使用Object作为超类,所有的类都直接或间接继承自Object类。所有对象(包括数组)都实现这个类的方法。native本地方法在Object类的源码中定义了native修饰的方法,native修饰的方法称为本地方法。特点被native修饰的方......
  • Java基础(四)
    网络编程网络编程概述:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络编程操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统网络编程在网络通信协议下,实现网络互联的不同......
  • java之NIO简介
    一、NIO基本简介NIO (NewlO)也有人称之为javanon-blockinglO是从Java1.4版本开始引入的一个新的IOAPI,可以替代标准的JavalOAPI。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的、基于通道的IO操作。NIO将以更加高效的方式进行文件的读写操......