博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java学习——常用类的学习之String,StringBuilder,StringBuffer三者的区别
阅读量:3941 次
发布时间:2019-05-24

本文共 1094 字,大约阅读时间需要 3 分钟。

Java学习——常用类的学习之String,StringBuilder,StringBuffer三者的区别

最近,在学习字符串常用类时,学习到了String,StringBuilder,StringBuffer三个常用类,在这里整理一下这三者的区别,这三者的区别主要还是在于运行速度和线程安全。

1.运行速度方面:StringBuilder > StringBuffer > String

为什么String运行速度最慢?因为我们知道String一旦创建其值就不能更改,但是StringBuilder,StringBuffer创建后是可以更改其值的 。我们来看一下下面代码:

public class Test {    public static void main(String[] args) {        String str = "abc";        System.out.println(str);//输出:abc                str = str + "ddd";        System.out.println(str);//输出:abcddd    }}

那么有人看到上面的代码就好奇了,不是说String一但创建就不能改变了吗,为什么第二个打印的结果会是abcddd呢?我们看起来像是str的对象被更改了,其实并不是这样。首先先创建一个String对象str,并把“abc”赋给它,然后当运行到 str = str + “ddd”;时,java的JVM虚拟机又创建了一个新的对象str,并把“abc”和“ddd”拼接起来付给它,之前的str没有引用所以被垃圾回器回收掉了。拼串的过程其实是一个不断创建新的对象再赋值的过程。所以String的速度是最慢的。

为了更深刻的理解,我们看一下上面这几行代码的内存图:

在这里插入图片描述

2.在线程方面:

StringBuffer是线程安全的,StringBuilder是线程不安全的。

所以StringBuffer速度要慢与StringBuilder。

看过这两个类的源码都知道StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全。

那么我们在什么情况下使用这三种字符串类呢?

1.String:适用于少量字符串操作的情况
2.StringBuffer:适用于多线程环境下在字符缓冲区进行大量字符串操作的情况
3.StringBuilder:适用于单线程环境下在字符缓冲区进行大量字符串操作的情况

转载地址:http://pxiwi.baihongyu.com/

你可能感兴趣的文章
环形链表
查看>>
删除链表的倒数第N个节点
查看>>
回文链表
查看>>
容器盛水问题
查看>>
滑动窗口最大值
查看>>
win7 文件删除后要刷新后才会消失
查看>>
用ffmpeg转多音轨的mkv文件
查看>>
ubuntu12.04 安装VLC,在root用户下不能使用的问题
查看>>
简单而又完整的Makefile
查看>>
GNU/Linux下如何卸载源码安装的软件
查看>>
ffmpeg 常用 命令随手记
查看>>
av_seek_frame中flags值的意义
查看>>
git 学习笔记
查看>>
C++类中的static的用法
查看>>
vector 释放内存 swap
查看>>
在linux下新增一块硬盘的操作。(包含大于2T的硬盘在linux下挂载操作)
查看>>
在32位系统中使用fseek和lseek或fwrite、write写大文件时,最大只能写2G左右的解决办法
查看>>
整理华为C/C++编码规范
查看>>
C语言中嵌入正则表达式
查看>>
libxml2 指南(中文)
查看>>