这样做的时候:
const int a = 5;
Run Code Online (Sandbox Code Playgroud)
我想知道是否会像变量那样得到4字节的内存?(在32位系统中)
jco*_*der 15
是的,它会的.虽然如果你从不接受它的地址,那么优化器可能会完全删除它,并在你的情况下用数字5替换对常量的任何引用.
这取决于编译器。
例如:
const int a = 4;
Run Code Online (Sandbox Code Playgroud)
这可以通过编译器分配 4 个字节并仅强制执行不变性来处理。
如果你有一个常量字符串:
static final java.lang.String name = "Foobar";
Run Code Online (Sandbox Code Playgroud)
编译器可以删除该变量,并将其替换为使用该变量的实际字符串“Foobar”。这不会占用堆空间,但它仍然必须存储在程序数据段中的某个位置。当 Java 发现在多个地方使用的带引号的字符串时,它会尝试执行此操作,因此它只需存储该字符串的一份副本。
无论哪种方式,常量都不会消除存储分配。他们充其量只能最大限度地减少所需的存储空间。