字符串是一种特殊的对象它不储存在堆栈里 而是存在字符串常量池里 就算字符串失去了所有的引用也不会被垃圾处理器处理掉 所有的字符串都是唯一的对象
引用s当然是在栈里了
1. 单独使用""引号创建的字符串都是常量,编译期就已经确定存储到String Pool中;
2,使用new String("")创建的对象会存储到heap中,是运行期新创建的;
3,使用只包含常量的字符串连接符如"aa" + "aa"创建的也是常量,编译期就能确定,已经确定存储到String Pool中;
4,使用包含变量的字符串连接符如"aa" + s1创建的对象是运行期才创建的,存储在heap中;
这样声明的String 都是存在常量池中的。没有进堆。
只有 new String("hello")这样才会存进 堆里,指向栈中的引用
栈区,如果是String s=new String(“hello”);在堆区
s在栈区,而hello在堆区,s指向堆中的hello的地址