黑马程序员技术交流社区

标题: final修饰的局部变量是存放在栈中还是在常量池中 [打印本页]

作者: 黑马李超    时间: 2013-3-20 18:55
标题: final修饰的局部变量是存放在栈中还是在常量池中
本帖最后由 黑马李超 于 2013-3-20 20:20 编辑

final修饰的局部变量是存放在栈中还是在常量池中
如果是放在常量池中,局部执行结束后是否会立即释放
另外常量池中的常量的生命周期是怎么样的
作者: 李阳阳    时间: 2013-3-20 19:34
存放在常量池中。首先final关键字对于变量的存储区域是没有任何影响的。jvm规范中,类的静态变量存储在方法区,
实例变量存储在堆区。也就是说static关键字才对变量的存储区域造成影响。final关键字来修饰变量表明了该变量一
旦赋值就无法更改。在Java中你可以这样理解:所有的变量,包括基本类型和引用类型,它们的变量都是存放在栈中
,栈中的每个变量都包含类型、名称、值这些内容,只不过基本类型变量的值为一个具体的值,而引用类型的变量的
值为对象在堆中的地址。
作者: 田磊阳    时间: 2013-3-20 19:39
java中的常量池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间。常量池其实也就是一个内存空间,不同于使用new关键字创建的对象所在的堆空间
作者: 刘辉    时间: 2013-3-20 20:07
final修饰的变量是个常量,无法更改.而常量是在方法区中的静态池中的,所以修饰的局部变量是在常量池中的.至于常量池中的常量生命周期的,举个例子,比如你String s="abcd",那么就形象得理解为常量池中有26个英文字母,从其中取出abcd组合起来赋值,其中就省却了每次都要创建新对象的麻烦




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2