Java中String的字符编码是什么?

What is the character encoding of String in Java?

实际上,我对Java中字符串的编码感到困惑。我有几个问题。如果你知道他们的答案,请帮助我:

1)内存中Java字符串的原生编码是什么?当我写String a ="Hello"时,它将以哪种格式存储?由于Java与机器无关,所以我不认为系统会进行编码。

2)我在网上看到"utf-16"是默认的编码,但我很困惑,因为我在写int a = 'c'时,得到了ASCII表中字符的编号。那么ascii和utf-16是相同的吗?

3)另外,我不确定字符串在内存中的存储依赖于什么:操作系统、语言?


  • Java的UTF - 16字符串式的商店。

  • "默认编码"是不是很好。java字符串存储的UTF - 16编码式外,但使用"默认编码,系统的不同需求,从平台到平台",甚至被改变的东西和可以通过环境变量的一类的在线平台。

    ASCII码是一个集(1)是拉丁字符集。UTF-16是Unicode的编码方式。如果你执行你的操作系统是int i = 'x'测试任何ASCII字符范围内的瀑布在你拿到的ASCII码值。utf - 16可以代表很多更多比ASCII字符,但是。

  • 从java.lang.character文档:

    The Java 2 platform uses the UTF-16 representation in char arrays and in the String and StringBuffer classes.

    这是操作系统的定义是部分的Java平台是Java 2平台的UTF - 16是用于这些类别。


  • 1)为对象的字符串,其中包含typically char数组和字符串的长度。常用的字符数组的连续阵列实现的16位字,每一个Unicode字符中含有天然的字节顺序。

    2)assigning字符值的一个整数converts 16位Unicode字符代码为其等效的整数。因此,这是一'c',U + 0.063,成为0x0063或99。

    3)由于每个String是一个对象,它包含的信息比其他类的成员(例如,类的描述符的信号锁定(Word,Word等)。

    adendum
    该对象的内容的实现(这取决于JVM的开销决定的固有的每个对象相关联的类),以及如何编码(即是真的,有些比别人更多的图书馆可能是有效的。

    ——>在典型的实现将两个词每架空配置实例(对象/类描述符的指针,和锁的控制信号;StringWord)中包含了一个对象的长度也intchar[]阵列和参考。当前字符的字符串的内容是存储在第二个对象,char[]阵列,进而是分配给两个字,一个数组的长度加字,加上16位的多char元件所需要的(加上任何额外的字符字符串是挂在左,当字符串被创建)。

    附录2 >这是一个代表一个字符的情况仅仅是一个真正的Unicode字符在大多数的情况下。这将意味着真正的UCS-2编码和在2005年。但现在已成为以Unicode编码的字符串有一个较大的是与在使用utf - 16 -病房的Unicode字符可以使用两个单chars String在Java。

    看看当前的源代码是在Apache的实现,例如:
    http:/ / / / www.docjar.com API的Java /的HTML / string.java.html郎


    在这回答你的问题,是不是,值得注意的是,……在Java字节码(类文件),字符串是存储在UTF - 8。java.sun.com http:/ / / / /文档/图书/的HTML _ jvm第二版/ classfile.doc.html


    编辑:我感谢帮助我的答案是错误的装卸。

    1)全是用在内部字符串处理UTF - 16。

    ASCII码(2)是一个集utf - 16。

    3)式是在Java的UTF - 16。适当的休息,这取决于你在哪里上的,是的。