您的位置:首页 > 产品设计 > UI/UE

String、StringBuffer、StringBuilder简单说明

2018-02-09 15:06 507 查看
说明:目前只是简单的包含源码前的说明,后续还会逐渐看其中方法。

String:

使用说明:

1.private final char value[];底层是不可变数组

2.String类代表字符串。在Java语言中,所有的String文字,比如”abc”,是作为这个类实例的实现

3.String是不变的;在创建之后,他们的值不能被改变。StringBuffer支持可变字符串。

4.因为String对象是不可变的,所以他们是能够被共享的。

5.简单使用:

* String str = "abc";
* is equivalent to:
* char data[] = {'a', 'b', 'c'};
* String str = new String(data);
* Here are some more examples of how strings can be used:
* System.out.println("abc");
* String cde = "cde";
* System.out.println("abc" + cde);
* String c = "abc".substring(2,3);
* String d = cde.substring(1, 2);*


6.String类包含方法用于测试序列的个别字符,比较字符串,查询字符串,抽取子字符串,创建一个字符串的拷贝,

7.JAVA语言提供特定的支持对于字符串的级联操作(+),并将其他对象转换为字符串。String级联是通过StringBuilder和StringBuffer类以及append方法来实现的。String转换是通过方法toString来实现的,toString方法是被Object定义的,并且被Java中所有类继承。关于String级联和转换的信息,参考Gosling、Joy、和Steele,Java语言特别说明。

8.除非特别说明,传递一个null参数给一个构造函数或者方法将会导致抛出NullPointerException

9.一个String代表一个UTF-16编码中的字符串,在编码中补充字符有代理对表示。

10.索引值指向char编码单元,所以在一个String中,一个补充字符占两个位置。String类提供方法处理统一代码点,还包括处理统一编码单元的方法。

StringBuffer:

特性:

1.线程安全的

2. 默认初始大小为16,每次插入一个数据也是将长度加1

3. 继承父类AbstractStringBuilder

4. 底层是可变数组: private transient char[] toStringCache;

使用说明:

1.一个线程安全的,可变序列的字符串

2.一个StringBuffer像一个String,但是是可以被修改的。任何时间点,包含一些特殊字符串序列,但是序列的长度和内容能够通过特定的方法进行修改。

3.StringBuffer是能够被多线程安全使用的。这些方法在必要时进行同步,以便任何特定实例上的所有操作的行为就好像他们以某种连续顺序发生,这与每个涉及的单个线程所进行的方法调用的顺序一致。

4.在StringBuffer中主要的操作是append()和insert(),这是被重写的为了接受任何类型的数据。每个函数都有效地将给定的的数据转换成字符串,然后将字符串append或者insert进入StringBuffer中。append方法总是添加这些字符串到buffer的末尾;insert方法添加字符串在特定的点位置。

5.例如,如果 z 指向一个StringBuffer实体对象,它的目前内容是”start”,然后调用 z.append(“le”),将会导致这个对象包含”startle”,然而调用 z.insert(4,”le”),将会改变StringBuffer为 “srarlet”。

6.一般来说,如果sb指向一个StringBuffer实例,然后 sb.append(x) 和 sb.insert(sb.length(),x)有同样的效果。

7.无论何时一个操作出现涉及一个源序列(比如从一个源序列执行append或者insert操作),这个类仅同步在StringBuffer执行这个操作,不在源序列上。

8.请注意,当StringBuffer是被涉及安全的使用来自多线程的同步,如果这个构造函数或者append、insert操作的对象一个被多线程共享源序列,这个代码必须保证在操作期间对源序列具有一致且不变的视图。

在代码执行期间,这个必须被持有锁的调用者满足,通过使用一个可变的源序列,或者不被多线程共享源序列。

9.每个StringBuffer有一个容量。只要包含在StringBuffer中的字符串长度没有超过这个容量,就不需要去分配新的额外的Buffer数组。如果外部的Buffer超过了,就自动变大的。

10.除非另有说明,传递一个null参数给一个构造器或者类中的方法将会导致抛出NullPointerException

11.从JDK5开始,StringBuilder这个类已经被实现了,作为等同类,被设计使用在单线程中。StringBuilder类通常在单线程中应该被优先使用,因为它支持同样的操作,但是速度更快,因为他操作是非同步的。

StringBuilder

特性:

1.线程不安全的,单线程速度快

2. 默认初始大小为16,每次插入一个数据就将长度加1

3. 继承父类AbstractStringBuilder

4. 底层数组: char[] value;

使用说明:

1.一个可变的字符串序列。这个类提供一个和StringBuffer兼容的API,但是不保证同步。

这个类是被设计作为StringBuffer的插入式替代使用的,可以用在StringBuffer单线程使用的地方。

在可能的情况下,这个类比StringBuffer优先使用的,因为在大多是实现情况下是速度更快的。

2.在StringBuilder中,主要的操作是 append 和 insert 方法,这两个方法是被重载去接收任何类型的数据。

每个函数都可以将给定的数据转换成字符串,然后 append 或者 insert 到StringBuilder的字符串中。

append方法总是添加这些字符串到buffer的末尾;insert方法添加字符串在特定的点位置。

3.例如,如果 z 指向一个StringBuilder实体对象,它的目前内容是”start”,然后调用 z.append(“le”),将会导致这个对象包含”startle”,然而调用 z.insert(4,”le”),将会改变StringBuffer为 “srarlet”。

4.一般来说,如果sb指向一个StringBuilder实例,然后 sb.append(x) 和 sb.insert(sb.length(),x)有同样的效果。

5.每个StringBuilder有一个容量。只要包含在StringBuilder中的字符串长度没有超过这个容量,就不需要去分配新的额外的缓存数组。如果外部的缓存超过了,就自动变大的。

6.StringBuilder实例对多线程不是安全的。如果有同步要求的,推荐使用Stringbuffer

7.除非另有说明,传递一个null参数给一个构造器或者类中的方法将会导致抛出NullPointerException
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: