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的区别

大家好,我是Morning,在CSDN写文,分享一些Java基础知识,一些自己认为在学习过程中比较重要的东西,致力于帮助初学者入门,希望可以帮助你进步。感兴趣的欢迎关注博主,和博主一起学习Java知识。大家还可以去专栏查看之前的文章,希望未来能和大家共同探讨技术。

今天和大家一起来探讨一个很基础的知识,可能在之前你了解的不是很清晰,希望这篇文章可以帮助到你。
String是Java中很基础的一个引用类型,它封装了对一个字符串对象的创建和一些基本操作。相信大家对这个类有一定的了解,同样Java提供的常用的可以创建、操作字符串对象的类还有俩个,分别为StringBufferStringBuilder,我在这篇文章中就浅谈这三个类的区别。

String类

在这里插入图片描述
在该类的源码中可以看到,这个类被关键字final修饰,这表示String类不可以被继承,也就是说,String类不可以拥有自己的子类。
现在让我们创建一个String对象,并操作它,看看可以发现什么:
在这里插入图片描述

在上图中我们可以看到,在我创建了一个String类对象之后的HashCode值和我操作之后的HashCode值是不同的,这说明该类型的值是不可变的,这就意味着我每一次操作这个字符串对象都会生成一个新的String对象,然后将指针指向这个新的对象,然后就可以用原来声明的变量名来访问操作后的这个字符串对象。
所以,如果需要大量的操作字符串的话,不建议使用String类型,因为它会大量的产生新的对象,GC就会工作,这就会影响性能。

StringBuffer类

在这里插入图片描述
可以看到StringBuffer类也被final关键字修饰,也不可以被继承。
同样的,我们创建一个StringBuffer对象,并操作它,看看它和String有什么不同:
在这里插入图片描述
由此可见,在我创建了一个StringBuffer类对象之后的HashCode值和我操作之后的HashCode值是相同的,这说明该类的值是可变的,每次的操作都是对对象本身操作,所以不会引发像String一样的问题。
所以在需要大量操作字符串的时候,建议使用StringBuffer来创建字符串对象。
然后让我们来看一看StringBuffer类中的append()方法:
在这里插入图片描述
可以看到该方法被synchronized关键字修饰,这表明StringBuffer 是线程安全的

StringBuilder类

在这里插入图片描述
看到这里就可以知道了,这三个常用的字符串类都是被final修饰的,都是不可以被继承的。
又到了上代码的环节:
在这里插入图片描述
由此可见,该类的值也是可变的,其实StringBuilder类是在 Java 5 中被提出,该类与stringBuffer最大的区别在于,StringBuilder中的方法没有被synchronized关键字修饰,不是线程安全的
在这里插入图片描述
但是在大多数情况下,StringBuilder要比StringBuffer要快一些,所以在一些对字符串操作较多,而且是单线程的情况下,建议使用StringBuilder。

总结

  1. String:值不可变,影响性能,在对字符串操作较少、单线程情况下使用
  2. StringBuffer:值可变,线程安全,在对字符串操作较多、多线程情况下使用
  3. StringBuilder:值可变,线程不安全,在对字符串操作较多、单线程情况下使用
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-14 15:48:10  更:2021-12-14 15:50:30 
 
开发: 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 5:35:05-

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