当前位置: 首页 > news >正文

JAVA之String,StringBuffer与StringBuilder三者之间的区别

做了一段时间的开发,但是对于String,StringBuffer和StringBuilder三者还是有诸多的疑问。现在稍微梳理一下:

1、String,StingBuffer,StringBuilder是字符串变量还是常量?

  • String                 ---->     字符串常量
  • StringBuffer      ---->     字符串变量(线程安全的)
  • StringBuilder    ---->     字符串变量(非线程安全的)
String是字符串常量,对于这个叫法大家都可能有一个疑问,String字符串不是变量吗?怎么叫常量?
我看首先看一下官方的解释:
Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared

官方解释说:String 是一个常量,他的值在创建之后不能改变,字符串缓冲区支持修改,因为字符串对象是不可变的,所以支持共享。

举个例子:
        String s = "abc";
        s = s + 1;
        System.out.println(s);

代码解析:首先我们定义一个变量s,给他赋值“abc”,然后在创建一个新的对象s用来执行s=s+1;也就是说我们之前的s并没有发生变化。这也说明了String类型是一个不可改变的对象,每次操作String字符串,实际上是不断的创建新的对象,而原来的对象变成了垃圾被GC回收,从而String字符串的效率也是最低的。

2、String,StingBuffer,StringBuilder效率如何呢?
       从高到底的顺序依次是:StringBuilder  >  StingBuffer > String
       有上知道了String是字符串常量,所以他的效率自然而然是最低的。对于StringBuffer和StringBuilder它们属于变量,是可以改变的对象,每次对字符串的操作,实际上实在一个对象上操作,所以效率更高一些。StringBuffer是线程安全的,考虑到安全问题,相对他的性能会更低一点。由此知道了从效率的角度看,StringBuilder最高,其次是StringBuffer,最后是String字符串常量。

总结:
       当多个线程使用字符串缓冲区时,使用StringBuffer保证正确的操作,如果是单线程的,建议使用StringBuiler效率更高一些。

当入行不深,只是自我总结一下,望路过大神多多指教,谢谢!

相关文章:

  • JAVA之冒泡(Bubble)排序
  • JAVA之选择排序
  • JAVA之插入排序
  • JAVA之类,构造函数和构造代码块
  • JAVA面试题之冒泡排序,插入排序及选择排序
  • Linux安装JDK步骤
  • Linux之ssh,scp命令的使用
  • Linux之ssh免密登录
  • Hadoop-2.8.0安装教程---单机/伪分布式配置
  • Java之序列化与反序列化
  • Hadoop之常用shell命令整理
  • Itext笔记之pdf页眉页脚
  • JAVA操作HDFS案例
  • zookeeper-3.4.10安装教程---分布式配置
  • storm-1.1.0安装教程---分布式配置
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • express.js的介绍及使用
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JavaScript 一些 DOM 的知识点
  • Laravel核心解读--Facades
  • Markdown 语法简单说明
  • React-flux杂记
  • Redis 中的布隆过滤器
  • Sublime text 3 3103 注册码
  • 从0到1:PostCSS 插件开发最佳实践
  • 计算机常识 - 收藏集 - 掘金
  • 网页视频流m3u8/ts视频下载
  • gunicorn工作原理
  • ​VRRP 虚拟路由冗余协议(华为)
  • #100天计划# 2013年9月29日
  • #14vue3生成表单并跳转到外部地址的方式
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (转载)(官方)UE4--图像编程----着色器开发
  • .net CHARTING图表控件下载地址
  • .net core控制台应用程序初识
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net 按比例显示图片的缩略图
  • .NET 使用 XPath 来读写 XML 文件
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET正则基础之——正则委托
  • [ 网络基础篇 ] MAP 迈普交换机常用命令详解
  • [c]统计数字
  • [CTO札记]如何测试用户接受度?
  • [JavaWeb学习] tomcat简介、安装及项目部署
  • [Jquery] 实现温度计动画效果
  • [leetcode]114. Flatten Binary Tree to Linked List由二叉树构建链表
  • [NOI 2016]循环之美
  • [one_demo_13]ArrayList去除重复的元素
  • [python]python筛选excel表格信息并保存到另一个excel
  • [SOA介绍]什么是SOA?