java中用于处理字符串常用的有三个类: 您所在的位置:网站首页 java字符串的操作方法有哪些 java中用于处理字符串常用的有三个类:

java中用于处理字符串常用的有三个类:

2024-07-16 05:21| 来源: 网络整理| 查看: 265

StringBuffer 和 StringBuilder 的 区别 在这里插入图片描述 String使用final关键字修饰可以知道String是不可变的类,String中字符数组的长度你定义多少,就是多少,不存在字符数组扩容一说。

1、首先String类是用final修饰的,这说明String不可继承 2、其次String类的主力成员字段value是个char[]数组,而且是用final修饰的,final修饰的字段创建后就不可变。且value只能被初始化一次 3.假设给字符串s赋值为abcd,第二次重新赋值为abcdef,这时候并不是在原内存地址上修改数据,而是重新指向一个新对象,新地址。

每改变一次就会在堆内存中创建一个新的对象,会在内存中存留大量的副本

StringBuilder 类内部维护可变长度char[] , 初始化数组容量为16,存在扩容, 其append拼接字符串方法内部调用System的native方法,进行数组的拷贝,不会重新生成新的StringBuilder对象。它是非线程安全的字符串操作类, 其每次调用 toString方法而重新生成的String对象,不会共享StringBuilder对象内部的char[],会进行一次char[]的copy操作。适用于单线程下使用

StringBuffer 类内部维护可变长度char[], 基本上与StringBuilder一致,但其为线程安全的字符串操作类,大部分方法都采用了、StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,以此来实现在多线程下的操作字符串的安全性 。安全,但效率低) StringBuffer初始化及扩容机制 1.StringBuffer()的初始容量可以容纳16个字符,当该对象的实体存放的字符的长度大于16时,实体容量就自动增加。StringBuffer对象可以通过length()方法获取实体中存放的字符序列长度,通过capacity()方法来获取当前实体的实际容量。 2.StringBuffer(int size)可以指定分配给该对象的实体的初始容量参数为参数size指定的字符个数。当该对象的实体存放的字符序列的长度大于size个字符时,实体的容量就自动的增加。以便存放所增加的字符。 3.StringBuffer(String s)可以指定给对象的实体的初始容量为参数字符串s的长度额外再加16个字符。当该对象的实体存放的字符序列长度大于size个字符时,实体的容量自动的增加,以便存放所增加的字符。

三者的继承结构 在这里插入图片描述 三者区别

String 是不可变的对象, 因此在每次对 String 类型进行改变的时候,都会生成一个新的 String 对象,(会在内存中产生大量的副本,影响性能)然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,性能就会降低。【线程安全】 使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象并改变对象引用。所以多数情况下推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。 StringBuilder是线程不安全的效率高,适用于单线程下 StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有