字符串作为位存储在内存中

String stored in memory as bits

我正在学习位以及内存如何存储整数和其他数据类型。我知道 int a = 11 将作为 1011 的位存储在内存中。 String b = "11" 将如何存储为位。

实际上,大多数机器上的 int 存储为

00000000000000000000000000001011

它将始终使用 language/machine 上的字长(或大多数情况下为 32 位)。

字符串是一个对象。它具有多种属性,并且不同语言的实现可能会有很大差异。对于主要部分,实际的字符串数据,有两种相当典型的存储方式:单独存储长度,或空终止。

无论采用哪种方式确定长度,字符都存储为字节序列。每个字符的大小取决于 language/compiler 设置等。为了支持非英语语言和特殊字符,通常每个字符存储 16 位,但较旧的语言通常仍使用 8。

字符编码基于旧的 ASCII table,但较新的规范涵盖了更多内容。查看 UTF-8 和 UTF-16。

但是,为了了解基础知识,ASCII table 为我们提供了一个去处。字符串中的每个字符都由一个数字定义,然后将该数字编码为二进制,就像一个整数。

http://www.asciitable.com/

字符“1”用 ASCII 码 49(十进制)表示,二进制为 00110001。整个字符串可能如下所示:

001100010011000100000000

包括空终止符。

public static void main(String[] args) {
    for(final byte b : "11".getBytes()) {
        String asBinary = String.format("%8s", Integer.toBinaryString(b & 0xFF)).replace(' ', '0');
        System.out.print(asBinary);
    }
}