前言
在阅读文章之前,先来做一道题:下面代码会输出什么呢?
$ String a ="abc";
$ String b = "abc";
$ System.out.println(a==b);
介绍
在上一篇文章中晚饭简单讲解了JVM是如何加载class文件的,浅解JVM加载class文件 | Mrsssswan.club
内存的控制权在于JVM,JVM在执行java程序时会把它管理的内存划分为不同的数据区
静态常量池
加载class文件之后内存中会生成该类的对象,并把该对象实例放在堆中
堆中的对象是可以共享的,方法区也和堆一样,它用于存储已被JVM加载了的数据。这其中就有常量,静态变量。
运行时常量池是方法区的一部分。
在上面题目中,“abc”这个字符串是放在常量池中的,内存中只有一份,是“共享”的