被final修饰的变量,存储在内存中的哪块区域?

被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没有关系。