作为 java doc声明:
char: The char data type is a single 16-bit Unicode character. It has a minimum value of '\u0000' (or 0) and a maximum value of '\uffff' (or 65,535 inclusive).
但是当我有一个字符串(仅包含 ASCII 符号)并将其转换为字节数组时,字符串的每个符号都存储在一个字节中,这小于 java 文档所述的 16 位。它是如何工作的?我可以想象 java 编译器/解释器每个字符只使用一个字节作为 ASCII 符号来解决性能问题。
此外,如果我有一个只有 ASCII 符号和一个 UTF-16 符号的字符串并将其转换为字节数组,会发生什么情况。 String 的每个符号现在都使用 2 个字节?
最佳答案
使用 character encoding 将字符转换为字节,反之亦然。 .
字符编码决定了字符如何用字节表示。例如,ASCII是一种字符编码,每个字符使用 7 位。显然,它只能表示 128 个字符,远远少于 Java 中存在的 65,536 个字符。
其他字符编码为 UTF-8 和 UTF-16。事实上,Java char
实际上是一个 UTF-16 字符 - 如果您直接将其转换为 int
,您将获得该字符的 UTF-16 代码。
这里有一个较长的字符编码教程:What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text .
如果你在一个String
上调用getBytes()
,它将使用系统默认的字符编码将字符串中的字符转换为字节。最好使用将字符集名称作为参数的 getBytes()
版本,这样您就知道使用了什么字符集。例如:
byte[] bytes = str.getBytes("UTF-8");
关于java - 字节数组中字符的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21124310/