1)字符串是对象,通常包含
char数组和字符串的长度。字符数组通常实现为一个连续的16位字数组,每个字都包含一个以本机字节顺序排列的Unipre字符。
2)将字符值分配给整数会将16位Unipre字符代码转换为等效的整数。因此
'c',U + 0063变为
0x0063或99。
3)由于每个
String对象都是对象,因此它包含除其类成员以外的其他信息(例如,类描述符词,锁/信号量词等)。
附录
对象的内容取决于JVM的实现(它确定与每个对象相关的固有开销)以及类的实际编码方式(即,某些库可能比其他库更有效)。
示例
一个典型的实现将为每个对象实例分配两个字的开销(用于类描述符/指针和一个信号灯/锁控制字);一个
String对象还包含一个
int长度和一个
char[]数组引用。字符串的实际字符内容存储在第二个对象(
char[]数组)中,该对象又分配了两个单词,再加上一个数组长度的单词,再加上
char该字符串所需的16位元素(加上在创建字符串时保持闲置状态)。
附录2 仅在大多数
情况下, 一个 字符代表 一个
Unipre字符的情况才成立。这意味着UCS-2编码,并且在2005年之前适用。但是到现在为止,Unipre变得更大了,并且必须使用UTF-16编码字符串-a,单个Unipre字符在Java中可能使用
两个
chars
String。
- 查看Apache实现的实际源代码,例如:http
- //www.docjar.com/html/api/java/lang/String.java.html



