java 内存分配:基本类型、String

Android · rango____ · 于 发布 · 最后由 y183399回复 · 272 次阅读
96

1、如int a = 3, 就会在栈中创建变量a的引用,而a是指向3的地址,即a的值是3的地址;

疑问:那3这个值是存放在哪儿??是栈中吗?这个3的地址是指向栈还是指向了其他????

2、字符串String, 有两种创建方法,这里只讨论String str = "abc"这个方法:
这里str的引用变量也是存放在栈中的,根据网上的资源,“abc”这个值是在字符串常亮池中,那str就存放的是“abc”在常量池中的地址;

疑问:那常量池是不是也是一种内存区域,和堆、栈有什么区别??那基本数据类型是不是也有对应的常量池?

共收到 2 条回复
61
weishu · #1 ·

抛砖引玉一下:

你的这两个问题,应该不是Java规范规定的,而是具体的JVM实现。
第一个问题,int, double, long 等基本类型属于值类型,在内存中的表示就直接是原始的值,比如int a = 3 可能就是0x00000011;double等浮点数有浮点数的表示法。至于这个内存放在哪,也就是它的地址是什么,取决于当前语境;比如局部变量那就是在栈上,如果是类的成员变量,static 的在meta space,实例变量堆上。

第二个问题,常量池也是一个内存区域,与堆栈的区别;就是JVM的一种划分而已;通常说的常量池应该就是指“字符串常量池”。

96
y183399 · #2 ·

呜啦啦啦

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册