Text和String比较

一般认为Text类和String类是等价的,但二者之间其实存在着不小差别:
以《Hadoop权威指南》中的案例为例,给定字符串  String s = “\u0041\u00DF\u6771\uD801\uDC00”; //s打印出来为"Aß東?" ,字符串s由四个字符的Unicode编码组成:

Unicode编码
utf-8编码
utf-8编码所占字节数

A
\u0041
0010 1001 (41)
1Byte

ß
\u00DF
1101 1101 (223)
2Byte


\u6771
110 0111 0111 0001 (26481)
3Byte

?
\uD801\uDC00
1 0000 0100 0000 0000  (66560)
4Byte

对比一: Text对象的charAt( )方法返回的是当前位置字符对应的Unicode编码的位置(int类型),String对象返回的是当前位置对应的字符(char类型);
 
对比二: Text对象的长度是每个字符UTF-8编码所占字节数之和,String对象的长度对应char编码单元的个数;
 
对比三: Text对象的charAt( )方法与String对象的codePointAt( ) 方法更加类似,都返回当前位置字符对应的Unicode编码位置;
 
对比四: Text类的find( ) 方法返回的是当前位置的字节偏移量,String类的indexOf( )方法返回的是char编码单元中的索引位置。

你可能感兴趣的:(Text和String比较)