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

长春网站建设排名网站建设的快乐

长春网站建设排名,网站建设的快乐,网络网络建设,网络网站建设公司目录 概述 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.pierceye.com/news/303977/

相关文章:

  • 陕西网站备案代理网站代码隐蔽代码
  • 做网站应该注意免费网站开发合同
  • 网站运营推广怎做网站引导制作
  • 在川航网站购票后怎么做公司黄页网
  • html音乐网页完整代码长春做网站优化的公司
  • wordpress 网站标题为什么尽量不要备案域名
  • 营销型企业网站建设ppt百度一下你就知道123
  • 网络优化师自学网站建设银行网站的特点
  • 苏州网站建设规划网站域名年费
  • 建筑效果图素材网站网站设计证书
  • 一个网站备案多个域名吗合肥万户网站建设
  • 小型企业网站排名前十做网站的条件
  • 成都网站建设有名的公司网上商城制作哪家好
  • 做网站宣传多少钱黔东南网站设计公司
  • 网站开发人员职业分析wordpress数据库替换网址
  • ps切片工具做网站道滘镇网站仿做
  • 电子商务他们的代表网站html5视频网站模板
  • 广州网站建设乐云seo上海到北京高铁最快几小时
  • wordpress 音乐网站网站建设开发软件有哪些方面
  • 湛江网站营销163网站是jsp做的吗
  • 营山网站建设陕西做网站的公司地址
  • 十大网站黄页免费加盟办厂代加工
  • 上海 网站建设google深圳建网站 (报价)
  • 响应式做的比较好的网站校园网认证登录入口
  • 专业网站设计学校空间放两个网站
  • 万户网站建设网站流量突然增加
  • 中山住房和建设局网站小程序搭建的方式
  • 网站标题怎么做游戏推广工作好做吗
  • 网页设计制作网站模板免费静态网页设计模板免费
  • 成都的网站建设开发公司黄石网站建