被final修饰的变量,叫做常量.常量又存在常量池中.
public class Student{
static final String school="xx五小";
final String grade="三年级";
public void getStudentInfo(String name){
final String address = "第五教学楼三楼";
System.out.println(school+" "+grade+" "+address+" "+name);
}
}
那么,school,grade,address 分别存储在内存中的哪些位置?
jdk7以后,字符串常量池和静态变量都从方法区移出也就是所说的永久代,移到了堆区。
和没有final其实一样
xx五小
三年级
第五教学楼三楼
放在常量区
school因为是static的,放在数据区,指向xx五小这个常量。
grade放在堆上,指向第五教学楼三楼这个常量。
address放在堆栈上,指向第五教学楼三楼这个常量。
school是静态变量,存储在持久区
grade,address都是字符串常量,存储在字符串常量池(常量池在持久区),注意,存在常量池中跟final没有关系。