A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黑马李超 于 2013-3-20 20:20 编辑

final修饰的局部变量是存放在栈中还是在常量池中
如果是放在常量池中,局部执行结束后是否会立即释放
另外常量池中的常量的生命周期是怎么样的

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

3 个回复

倒序浏览
存放在常量池中。首先final关键字对于变量的存储区域是没有任何影响的。jvm规范中,类的静态变量存储在方法区,
实例变量存储在堆区。也就是说static关键字才对变量的存储区域造成影响。final关键字来修饰变量表明了该变量一
旦赋值就无法更改。在Java中你可以这样理解:所有的变量,包括基本类型和引用类型,它们的变量都是存放在栈中
,栈中的每个变量都包含类型、名称、值这些内容,只不过基本类型变量的值为一个具体的值,而引用类型的变量的
值为对象在堆中的地址。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间。常量池其实也就是一个内存空间,不同于使用new关键字创建的对象所在的堆空间

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
final修饰的变量是个常量,无法更改.而常量是在方法区中的静态池中的,所以修饰的局部变量是在常量池中的.至于常量池中的常量生命周期的,举个例子,比如你String s="abcd",那么就形象得理解为常量池中有26个英文字母,从其中取出abcd组合起来赋值,其中就省却了每次都要创建新对象的麻烦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马