IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> String、StringBuffer、StringBuilder的区别 -> 正文阅读

[Java知识库]String、StringBuffer、StringBuilder的区别

区别部分介绍:

介绍:

String 是java中的字符串,用来创建和操作字符串。

StringBuffer和StringBuilder,对字符串进行修改时会用到。

相同点:

三者都是final类,不能再被继承。

最主要的区别:

主要在 运行效率 和 线程安全 这两方面。

运行效率来说:

StringBuilder > StringBuffer > String?

主要原因是:

? ? ? ? String是不可变类,即字符串常量,每次对String对象的修改都是创建新对象,所以其是最慢的;StringBuffer和StringBuilder则是可变类,即字符串变量,他们的对象在进行修改时不会产生新的对象。

那为什么StringBuilder会比StringBuffer快呢?看下面的线程安全。

线程安全来说:

StringBuffer是线程安全的,支持并发操作,很多方法都含有 synchronized 关键字;相反StringBuilder并未含有该关键字,并不支持多线程,保证不了线程安全。

回答上面的运行效率原因,因为StringBuffer支持多线程操作,所以相对单线程的StringBuilder来说会慢一些,所以在单线程情况下推荐使用StringBuilder。

演示案例:

定义三个对象,都是abc,同时加100000次de,看一下运行时间。

public static void main(String[] args) {
        //String
        String str = "abc";

        long startTime = System.currentTimeMillis();
        for(int i = 0; i<100000;i++){
            str += "de";
        }
        long endTime = System.currentTimeMillis();
        System.out.println("String的耗时为"+ (endTime - startTime));

        //StringBuffer
        StringBuffer stringBuffer = new StringBuffer("abc");
        startTime = System.currentTimeMillis();
        for (int i = 0; i<100000; i++){
            stringBuffer.append("de");
        }
        endTime = System.currentTimeMillis();
        System.out.println("StringBuffer的耗时为"+ (endTime - startTime));

        //StringBuilder
        StringBuilder stringBuilder = new StringBuilder("abc");
        startTime = System.currentTimeMillis();
        for (int i = 0; i<100000; i++){
            stringBuilder.append("de");
        }
        endTime = System.currentTimeMillis();
        System.out.println("StringBuilder的耗时为"+ (endTime - startTime));
    }

String的耗时为20225
StringBuffer的耗时为5
StringBuilder的耗时为2

?最终结果是如此,由此可见,其耗时之间的差距。

总结:

? ? ? ? 1. 少量字符时可以用String类,但是在大量字符需要进行修改时,建议使用StringBuffer或StringBuilder;

????????2. 在使用多线程的时候,建议使用StringBuffer,它支持多线程;

? ? ? ? 3. 在单线程情况下,建议是用StringBuilder

常用方法介绍:

在使用StringBuffer时其内是有很多方法的,在此进行常用的几个的介绍。

StringBuffer stringBuffer = new StringBuffer("abc");

1. append 方法

功能:进行字符串连接,将制定字符拼接到最后

写法:stringBuffer.append("de");

效果:字符串变为 "abcde"

2. insert 方法

功能:在指定对象字符串中插入指定内容

写法:stringBuffer.insert(1,"de");

效果:字符串变为 "adebc"

3. delete 方法

功能:删除从开始位置到结束位置的内容(包括开头,不包括结尾)

写法:stringBuffer.delete(0,2);

效果:字符串变为 "c"

4. deleteCharAt 方法

功能:删除指定位置的字符

写法:stringBuffer.insert(1);

效果:字符串变为 "ac"

5. reverse 方法

功能:将字符串内容进行反转

写法:stringBuffer.reverse();

效果:字符串变为 "cba"

6. subString 方法

功能:将选定位置区间内字符串截取返回一个新字符串(包括开头,不包括结尾,只提供一个默认为开始到结束)

写法:stringBuffer.subString(1); ||??stringBuffer.subString(1,2);

效果:返回字符串?"bc"? || "b"

7. charAt?方法

功能:将字符串指定位置的字符返回出来(注意是返回的字符类型)

写法:stringBuffer.charAt(1);

效果:返回 'b'

8. setCharAt?方法

功能:将指定位置设置成指定字符

写法:stringBuffer.setCharAt(1,'d');

效果:字符串变为 "adc"

9. indexOf?方法 (相反的方法 lastIndexOf )

功能:返回指定字符串出现的第一次下标位置

写法:stringBuffer.indexOf("b");

效果:返回 1

10. replace 方法

功能:将指定区间内字符串替换为指定字符串(包含开头,不包含结尾)

写法:stringBuffer.replace(0,1,"de");

效果:字符串变为 "debc"

11. length?方法

功能:返回字符串长度

写法:stringBuffer.length();

效果:返回 3

综上11个方法是个人用的比较多的一些方法,一般情况下足够满足很多操作了已经,省去很多麻烦的中间过程可以。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 11:53:51  更:2021-12-07 11:55:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:14:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码