Java中的char在JVM内存[堆/栈]中是大端还是小端?也就是说,它是UTF-16 LE还是UTF-16 BE?
我认为这并不重要,取决于JVM的实现,并保持本机芯片顺序以提高性能。例如,对于英特尔处理器来说,是LE。这正确吗?
还是它在Java规范中有明确规定?
Java中的char在JVM内存[堆/栈]中是大端还是小端?也就是说,它是UTF-16 LE还是UTF-16 BE?
我认为这并不重要,取决于JVM的实现,并保持本机芯片顺序以提高性能。例如,对于英特尔处理器来说,是LE。这正确吗?
还是它在Java规范中有明确规定?
类文件格式规定所有项目必须使用大端字节序。
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html我没有检查,但我怀疑JNI规范也谈到了字节序,我认为它是大端字节序。
Java语言本身与大小端无关。(虚拟机实现可能使用硬件端口。)
不同的字符转换成字节序列的方式有固定的大小端,例如DataOutputStream
。
虚拟机规范并没有明确指定这个问题,而是由虚拟机自己决定如何处理。
而且由于没有直接的方法将 char
解释为两个 byte
值,因此你甚至无法从Java程序中看到这个决策的结果(任何一个符合规范的虚拟机上的Java应用程序都会表现完全相同,与虚拟机的字节序无关)。