java 常量放在方法区中,那么方法内部的常量在哪里?栈桢还是方法区?
方法内的为局部变量,会随着方法的调用压栈,所以在栈中
要看情况,当你的常量是基本类型的话,肯定是调用方法时直接压栈,比如下边这个a变量就在栈内存,如果是引用类型的话,那new String("abc");这一步是要到堆内存分配空间的,然后把这个地址的值赋值给str变量(压栈),也就是我们常说的值传递。另外你题目这个方法区有一定的误导,其实在jvm中方法区只是一个称呼,
它实际上和我们常说的方法并没有直接关系
public void test(){
final int a = 3;
final String str = new String("abc");
}
常量放在放在方法区是1.6的说法,1.7常量池从方法区移到了堆里 1.8的时候方法区没了 被元数据区代替