在Java JVM里,如果一个变量被声明为final或者static, 那么这个变量的引用以及它的值被存放在哪?
发布网友
发布时间:2022-03-24 22:56
我来回答
共5个回答
热心网友
时间:2022-03-25 00:25
static不能用在方法里面,只能修饰类的属性或者方法。
static修饰的变量被放在方法区,因为它属于类变量,是类的一部分。
所有的方法中的普通变量都是在栈中的局部变量表中的,如果是引用类型的变量局部变量表会存放引用对象的地址,这个引用对象实际存储在堆中。如果被final修饰的话代表这个引用类型的变量指向的地址无法被改变。所以final修饰的引用的地址和final修饰的基本数据类型都会放在常量池,常量池位于方法区中。
热心网友
时间:2022-03-25 01:43
int a = 9;
这种变量在编译器就已经知道大小,长度了。所以应该不会放到堆中,都是直接放到栈里面的。
热心网友
时间:2022-03-25 03:18
static : 在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间,static变量有点类似于c中的全局变量的概念
定义方法中的参数为final,对于基本类型的变量,这样做并没有什么实际意义,因为基本类型的变量在调用方法时是传值的,也就是说你可以在方法中更改这个参数变量而不会影响到调用语句,然而对于对象变量,却显得很实用,因为对象变量在传递时是传递其引用,这样你在方法中对对象变量的修改也会影响到调用语句中的对象变量,当你在方法中不需要改变作为参数的对象变量时,明确使用final进行声明,会防止你无意的修改而影响到调用方法。另外方法中的内部类在用到方法中的参变量时,此参变也必须声明为final才可使用
具体参考位置:http://www.west263.com/www/info/29091-1.htm
热心网友
时间:2022-03-25 05:09
全局变量是在堆(Heap)里 ,局部变量在栈里,static 不允许放主函数里面.
热心网友
时间:2022-03-25 07:17
int 是在heap区