![在这里插入图片描述](https://img-blog.csdnimg.cn/2019081712315163.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzNzI5OTcx,size_16,color_FFFFFF,t_70)**
*String 类在java源码中是定义为final的意味着它是一个常量; String c=“java”+“c++”;这条语句首先在编译阶段(也就是生成class文件阶段)编译器会识别出"java"和"c++“是一个字符串常量;编译器会做常量的运算,生成"javac++”,然后编译成class文件,文件中String c的值已经变成"javac++”;然后class文件进入运行阶段,由类加载器加载载进内存中,java虚拟机会为常量分配内存空间,而字符串常量"javac++"会被放进字符串常量池中 此时javac++已经是一个对象了,所以字符串常量池的字符串都是可以认为是new出来的;然后将"javac++"的地址值赋值给变量String c,此时c指向字符串“javac++”在字符串常量池的地址值。
下面是一张将以上变量设置为常量的图运算的结果