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

摄影之友官网seo排名赚钱

摄影之友官网,seo排名赚钱,企业管理咨询服务是什么,iis wordpress 权限设置目录 概述 String为何不可变#xff0c;StringBuilder和StringBuffer为何可变 StringBuffer为何线程安全的#xff0c;而StringBuilder为何非线程安全 三者性能分析 使用场景 概述 String、StringBuilder和StringBuffer都是用来处理字符串的类#xff0c;底层都是通过ch…目录 概述 String为何不可变StringBuilder和StringBuffer为何可变 StringBuffer为何线程安全的而StringBuilder为何非线程安全 三者性能分析 使用场景 概述 String、StringBuilder和StringBuffer都是用来处理字符串的类底层都是通过char[]数组实现的。(jdk1.8及之前) String是不可变的(线程安全的)StringBuilder和StringBuffer是可变的。StringBuffer是线程安全的而StringBuilder是非线程安全的。具体如下 String对象一旦创建其值是不能修改的如果要修改会重新开辟内存空间来存储修改之后的对象而StringBuffer和StringBuilder对象的值是可以被修改的 StringBuffer几乎所有的方法都使用synchronized实现了同步线程比较安全在多线程系统中可以保证数据同步但是效率比较低而StringBuilder 没有实现同步线程不安全在多线程系统中不能使用 StringBuilder但是效率比较高。 如果我们在实际开发过程中需要对字符串进行频繁的修改不要使用String否则会造成内存空间的浪费当需要考虑线程安全的场景下使用 StringBuffer如果不需要考虑线程安全追求效率的场景下可以使用 StringBuilder。 下面我们从三个维度可变性、线程安全性、性能来分析区别。 String为何不可变StringBuilder和StringBuffer为何可变 String部分源码 public final class Stringimplements java.io.Serializable, ComparableString, CharSequence {/** The value is used for character storage. */private final char value[];//。。。。。。。。。。。。。。。。。。 } String类被声明为final这意味着它不能被继承。那么他里面的方法就是没办法被覆盖的。 用final修饰字符串内容的char[] (从JDK 1.9开始char[]变成了byte[])由于该数组被声明为final一旦数组被初始化就不能再指向其他数组 String类没有提供用于修改字符串内容的公共方法。例如没有提供用于追加、删除或修改字符的方法。如果需要对字符串进行修改会创建一个新的String对象。所以说String是不可变的。 与String不同StringBuilder和StringBuffer底层封装的char[]并没有用final修饰这意味着它是可以修改的。 StringBuilder部分源码 public final class StringBuilderextends AbstractStringBuilderimplements Serializable, CharSequence {//。。。。。。。。。。。。。。。。。 } abstract class AbstractStringBuilder implements Appendable, CharSequence {/*** The value is used for character storage.*/char[] value;//。。。。。。。。。。。。。 } StringBuffer部分源码 public final class StringBufferextends AbstractStringBuilderimplements Serializable, CharSequence {//。。。。。。。。。。。。。。。。 } abstract class AbstractStringBuilder implements Appendable, CharSequence {/*** The value is used for character storage.*/char[] value;//。。。。。。。。。。。。。。。。。。。。。。。 } StringBuffer为何线程安全的而StringBuilder为何非线程安全 StringBuffer是线程安全的它的方法都使用了synchronized关键字进行同步。在每个方法内部通过加锁synchronized来确保在多线程环境下的安全访问。这意味着当一个线程访问StringBuffer的方法时其他线程需要等待锁释放后才能执行相应的方法。因此StringBuffer适用于多线程环境下对字符串的修改操作。 //StringBuffer部分源码Overridepublic synchronized StringBuffer append(Object obj) {toStringCache null;super.append(String.valueOf(obj));return this;}Overridepublic synchronized StringBuffer append(String str) {toStringCache null;super.append(str);return this;} 而StringBuilder则没有使用synchronized关键字进行同步它是非线程安全的。这样可以提高性能因为不需要进行锁的获取和释放操作。但是在多线程环境下如果有多个线程同时访问和修改StringBuilder对象可能会导致数据不一致或出现竞态条件的问题。因此StringBuilder适用于单线程环境下对字符串的修改操作。 //StringBuilder部分源码Overridepublic StringBuilder append(Object obj) {return append(String.valueOf(obj));}Overridepublic StringBuilder append(String str) {super.append(str);return this;} 三者性能分析 String由于String是不可变的每次对String进行修改操作时都会创建一个新的String对象。这可能导致频繁的对象创建和垃圾回收影响性能 StringBuilder由于StringBuilder是可变的它使用可变的字符数组存储字符串不会每次都创建新的对象。在需要频繁进行字符串拼接、替换等操作时使用StringBuilder可以提高性能 StringBuffer与StringBuilder类似StringBuffer也是可变的但是它是线程安全的。在多线程环境下由于同步机制的存在StringBuffer的性能可能会稍低于StringBuilder 使用场景 String适用于不需要频繁修改字符串内容的场景。由于String是不可变的每次对String进行拼接、替换或者修改操作时都会创建一个新的String对象这样可能会导致频繁的对象创建和垃圾回收影响性能。因此如果字符串内容不需要改变或者只需要读取字符串的值可以使用String。 对于一些常量字符串或者字面量例如日志输出时的提示信息、固定格式的输出等由于它们的值是固定的不需要做任何修改因此可以使用String。 在某些业务逻辑中需要对字符串进行一些操作但这些操作的结果不会影响原始字符串。例如从数据库中查询到的数据如果需要展示给用户通常不会被修改这种场景下可以使用String。 StringBuilder适用于单线程环境下需要频繁修改字符串的场景。由于StringBuilder是可变的它使用可变的字符数组存储字符串不会每次都创建新的对象。因此在需要频繁进行字符串拼接、替换等操作时使用StringBuilder可以提高性能。 在开发Web应用时需要将多个字符串拼接成一个完整的HTML页面这种场景下可以使用StringBuilder。 当需要从文件中读取数据并进行一系列复杂的字符串操作时可以使用StringBuilder。 StringBuffer适用于多线程环境下需要频繁修改字符串的场景。与StringBuilder类似StringBuffer也是可变的但是它是线程安全的内部的方法都使用了synchronized关键字进行同步。这意味着在多线程环境下多个线程可以安全地同时访问和修改StringBuffer对象。因此如果在多线程环境下需要频繁进行字符串操作应该使用StringBuffer来确保线程安全。 Web服务器需要同时处理多个客户端请求这种场景下可以使用StringBuffer来确保线程安全。 一个多线程的任务需要将多个线程的执行结果拼接成一个完整的字符串可以使用StringBuffer。
http://www.zqtcl.cn/news/594247/

相关文章:

  • 比较好的源码网站河南网站seo推广
  • 做网站推广什么好网站界面结构
  • 龙岗网站优化常见的渠道推广方式有哪些
  • wordpress 后台乱码成都百度推广优化
  • 大连 响应式网站wordpress保存图片不显示
  • 二手车网站建站网站建设企业建站要求
  • 海山免费网站建设做视频网站如何赚钱
  • 网站增加点击率 怎样做小店面设计装修网
  • 一 美食 视频网站模板下载安装外国优秀网站欣赏
  • 网站服务器部署重庆涪陵网站建设公司
  • php网站开发实践要做网站照片怎么处理
  • 网站短期就业培训班搜集关键词的网站
  • 社区网站开发淘宝网站打算找人做
  • 政务类网站网页管理平台
  • 淘宝联盟微信里做网站花卉市场网站建设基本步骤
  • 做网站广告语网站注册建设
  • 仓山福州网站建设哪个是网站建设里面的
  • 开网站流程开发公司起名
  • 免费建站优化网站基本设置
  • 网站建设需要上传数据库吗seo自己做网站吗
  • 网站制作ppt杭州网站的特点
  • 美丽寮步网站建设价钱杭州网站设计询问蓝韵网络
  • 毕节网站建设公司网站职业技术培训学校
  • 果洛wap网站建设比较好17岁在线观看免费高清完整版
  • 一级a做爰片在线看免播放器网站一个网站突然打不开
  • 聊城网站开发培训wordpress实时预览载入中
  • 网站设计文章国际转运网站建设
  • 南充市建设厅官方网站购物网站设计说明
  • 防疫网站网页设计wordpress不同侧边栏
  • 网站的建设多少钱长春市招标建设信息网