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

首先常量池分为类编译后的常量池和运行时常量池
类的常量池为类编译后生成的 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容