美文网首页
类常量池和运行时常量池的区别

类常量池和运行时常量池的区别

作者: MakeACoder | 来源:发表于2017-12-22 15:17 被阅读0次

    首先常量池分为类编译后的常量池和运行时常量池
    类的常量池为类编译后生成的 Constant pool:
    在代码运行时会将 上面 Constant pool 的内容加载到方法区(perm jdk1.8以后是metaspace)生成运行时常量池
    运行时常量池。
    关于String类型,如String a = "a" 在代码运行时会先初始化到 SymbolTable符号表中(在方法区) 运行这行代码时
    将常量 a 拷贝到 堆中使用。

    这里有两个问题
    1、 多个类定义了 String a="a" 这个字符串 在SymbolTable中只占一个内存空间 (来自笨神)
    2、 多个类调用 String a= "a" 这条语句 只生成一个对象(1.7以后在堆中)

    例:

    String a="a"
    String b="a"
    System.out.println(a==b)  //true
    

    相关文章

      网友评论

          本文标题:类常量池和运行时常量池的区别

          本文链接:https://www.haomeiwen.com/subject/kvxxgxtx.html