45 java string character-encoding
我对Java中的字符串编码感到困惑.我有一些问题.如果您知道答案,请帮助我:
1)内存中Java字符串的本机编码是什么?我写的String a = "Hello"
时候会存储哪种格式?由于Java与机器无关,我认为系统不会进行编码.
2)我在网上读到"UTF-16"是默认编码,但我感到困惑,因为我写的时候说int a = 'c'
我得到了ASCII表中字符的编号.那么ASCII和UTF-16是一样的吗?
3)我还不确定内存中字符串的存储取决于:操作系统,语言?
Lau*_*ves 38
Java在内部将字符串存储为UTF-16.
"默认编码"并不完全正确.Java在内部将字符串存储为UTF-16,但外部使用的编码"系统默认编码"因平台而异,甚至可能会被某些平台上的环境变量等内容所改变.
ASCII是Latin 1的子集,它是Unicode的子集.UTF-16是一种编码Unicode的方法.因此,如果int i = 'x'
对任何属于ASCII范围的字符执行测试,您将获得ASCII值.但是,UTF-16可以表示比ASCII更多的字符.
Java 2平台在char数组和String和StringBuffer类中使用UTF-16表示.
因此,它被定义为Java 2平台的一部分,UTF-16用于这些类.
Dav*_*ble 21
1)字符串是对象,通常包含char
数组和字符串的长度.字符数组通常实现为16位字的连续数组,每个字包含本机字节顺序的Unicode字符.
2)将字符值分配给整数将16位Unicode字符代码转换为等效的整数.因此'c'
,即U + 0063,变为0x0063
或99.
3)由于每个String
都是一个对象,它包含除其类成员之外的其他信息(例如,类描述符字,锁/信号量字等).
ADENDUM
对象内容取决于JVM实现(确定与每个对象相关的固有开销),以及类实际编码的方式(即,某些库可能比其他库更有效).
示例
典型的实现将为每个对象实例分配两个字的开销(对于类描述符/指针和信号量/锁控制字); 一个String
对象还包含一个int
长度和一个char[]
阵列基准.字符串的实际字符内容存储在第二个对象中,该char[]
数组又分配了两个字,加上一个数组长度字,加上char
字符串所需的16位元素(加上任何额外的字符)在创建字符串时左转.)
附录2
的情况下一个字符代表一个 Unicode字符是唯一真正在大多数情况下.这意味着UCS-2编码在2005年之前是真实的.但是到现在为止,Unicode变得越来越大,并且必须使用UTF-16对字符串进行编码 - 其中单个Unicode字符可以在Java中使用两个 char
s String
.
查看Apache实现的实际源代码,例如:http:
//www.docjar.com/html/api/java/lang/String.java.html
尽管这不能回答您的问题,但值得注意的是...在Java字节码(类文件)中,字符串存储在UTF-8中。http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html
归档时间: |
|
查看次数: |
60920 次 |
最近记录: |