本书未发布
变量的一些问题
变量
因为内存地址可读性太差了,就好像你记不住 IPv4 更记不住 IPv6,但你跟快能记住 baidu.com。
64 位 x86 内存地址为 0x0000000000000000
。
所以在可读性比较高的高级语言中,我们通过变量来对内存中的数据进行读写,变成机器码时,变量会变成内存地址。
变量的声明周期
这里以 Java 为例。
栈
栈一般用于存储函数内的数据,如局部变量、参数等,它们在函数运行以后就会被释放。
这里有一个点需要注意,如果你传进去一个对象,并不会产生对象的副本。
是因为你 new
出来的对象实际存储在堆上(基本类型不在堆上)。
User user = new User();
这个 new
出来的对象实际上在堆上,user
是引用了堆上的地址。
所以你传进函数里的 User user
只是传了一份地址。
堆
Java new
出来的对象都存在堆上,只有 JVM 判定不会再使用的时候才会被释放。
常量池
常量池只有进程挂了才会释放。