the detailed annotation of StringBuilder

public int capacity()
返回当前容量。容量指可用于最新插入字符的存储量,超过这一容量便需要再次分配。
返回:
当前容量。
public int length()
返回长度(字符数)。
指定者:
接口 CharSequence 中的 length
返回:
此对象表示的当前字符序列的长度。
容量是理论值,长度是实际值。
public StringBuilder append(任意类型) 
将 任意类型 参数的字符串表示形式追加到序列。 
参数将被转换成字符串,就好象使用了 String.valueOf 方法一样。然后,将所得字符串中的字符追加到此序列。

reverse

public StringBuilder reverse()
将此字符序列用其反转形式取代。如果序列中存在代理项对 (surrogate pair),在 reverse 操作中将其作为单个字符处理。因此,高-低代理项的顺序不会反转。假设 n 为执行 reverse 方法前此字符序列的字符长度(并非 char 值的长度),则新字符序列中索引 k 处的字符将等于原字符序列索引 n-k-1 处的字符。

注意,进行 reverse 操作后,执行操作前未成对的低代理项和高代理项将成为代理项对。例如,反转 "uDC00uD800" 将生成有效的代理项对 "uD800uDC00"。

返回:
此对象的一个引用。
在这里有人可能会问什么是代理项对?下面将给出详细解释。
字面意义是:代理对。实际上是指:对于一个UTF16编码改用两个UTF16编码来代替。
翻译的估计可以是:UTF16编码代理对。

为何需要surrogate pairs?本来一个字符用一个UTF16编码(两个字节)来表示即可,但是由于需要被编码的字符越来越多,只用一个UTF16编码已经不足于表示所有的字符。因此,就需要考虑使用2个UTF16来表示一个字符(四个字节)。但是如果对于所有的字符都这样编码的话,太浪费空间了(原来只需要2个字节,现在都改用4个字节),所以规定,只有使用两个一定范围内的UTF16编码才被认为是一组surrogate pairs,其一起用来表示一个字符,对于其余的情形还是用一个UTF16来表示一个字符。
原文地址:https://www.cnblogs.com/lzp123456-/p/9762770.html