首页 新闻 会员 周边 捐助

java常量的存储

0
悬赏园豆:40 [已解决问题] 解决于 2015-08-16 14:08

     网上有博客说,java中的常量存储在常量池中,而Think in java 说常量直接存放在程序代码内部,那么java中的常量到底存储在哪里?java程序加载到内存后,除了数据还有程序代码,那么代码是存储在哪的。

  另外有提到说,栈中的值存在共享行为,例如对于:int a =3; int b = 4;这两句的执行过程是:

编译器先处理 int a = 3 ;首先它会在栈中创建一个变量为 a 的引用,然后查找栈中是否有 3 这个值,如果没找到,就将 3 存放进来,然后将 a 指向 3 。接着处理 int b = 3 ;在创建完 b 的引用变量后,因为在栈中已经有 3 这个值,便将 b 直接指向 3 。这样,就出现了 a 与 b 同时均指向 3 的情况。

而在Think in Java 中特别指明了基本数据类型,是创建了一个非引用的自动变量,这个变量直接存储值,并置于栈中。

这两种说法,哪个正确

恰同学少年2011的主页 恰同学少年2011 | 初学一级 | 园豆:138
提问于:2014-12-28 21:43
< >
分享
最佳答案
2

你理解错了;常量是常量;int a=3是变量,这点你搞清楚;java内存分为四块,堆,栈,静态区(常量区)和程序代码区。我记得是这四个,new出来的都在堆上,栈里是临时变量,比如int a=3;常量去存放const和static;代码区就不说恶霸

收获园豆:30
加拿大小哥哥 | 初学一级 |园豆:183 | 2015-01-03 00:17
其他回答(1)
-1

Java中常量是存储在堆内存中的方法区的常量池中,而代码也是存储在堆内存的方法区。栈内存中存储局部变量,你上面说的a、b就在栈里面,常量3、4就在堆里面。a的引用(地址)指向常量池中的3。如果b也等于3,那么b就和a指向常量池中的相同位置。

收获园豆:10
彭驰 | 园豆:214 (菜鸟二级) | 2015-04-08 17:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册