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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴刚 中级黑马   /  2013-5-29 00:46  /  1431 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class A {
final int  a = 9;
new A();
}

请问final说修饰的变量到底存在内存的那个地方?网上说有的和A对象一起存在堆中,因为final修饰的i是成员变量,有的说是存在于本地方法区的常量池,还有的人说9存在常量池,然后i存在堆中,并且堆中存放的是9的地址指针,╮(╯▽╰)╭!!!!!!!!!!!!!!!!

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

5 个回复

倒序浏览
就在这段代码里,我比较赞成final修饰的i是成员变量和A对象一起存在堆中。觉得深究这种问题没有太大的必要
回复 使用道具 举报
不清楚,只知道毕老师说过一般    public static final (数据类型) (变量名) = 数值

三个一起出现就是全局常量
回复 使用道具 举报
在jvm规范中,类的静态变量存储在方法区,实例变量存储在堆区,也就是说static关键字才对变量的存储区域造成影响;final关键字对于变量的存储区域是没有任何影响的,用final关键字来修饰变量表明该变量一旦赋值就无法更改,并且编译器必须保证该变量在使用前被初始化赋值。
class A {
final int  a = 9;
new A();
}
这段代码里,a和9就去分开的:a是这个类的一个实例变量,类会在实例化的时候将这个变量存储在堆区,无论是否有final关键字,它都是在堆区;
                            而9,是一个字面量,它会存放在常量池,无论你是否加上final关键字,5都会在常量池;
                            这段代码你可以理解为:从常量池中取出9赋给a。

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
final关键字(掌握)
        (1)final是最终的意思,可以用于修饰类,修饰方法,修饰变量
        (2)特点:
                它修饰的类不能被继承
                它修饰的方法不能被重写
                它修饰的变量是常量
既然是常量,就是在常量池,a是存在栈内存中,9是在常量池中,a 拿的事9在常量池中的地址值指向9.

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马