请问String s=new String("abc");
是先在栈开辟一块空间存放引用s;
然后在堆里开辟堆里开辟一块空间存放new String("abc")对象;
最后是在常量池存放abc常量吗???
实现String s=new String("abc");时,不会查看常量池有没常量abc?
追答new String("abc");是在运行期 new出来的 存放在堆中,可以有多份,所以我想没必要查看常量池吧
追问那String s=new String("abc");创建对象new String("abc");时如果常量池没有常量abc,会不会在常量池同时创建一个常量 abc?
追答这个我和我们群里的人也搞乱了 讨论的结果是不会添加到常量池 我也只能帮你这么多了
就是说new一个对象 就会在常量池存放String 对象的“值”---abc常量??常量池就存在常量abc?
追答new出来的都是在堆内存里面新开辟一块空间,你可以去测试嘛,比较s=="abc",然后再String s2= new String("abc"),然后比较s==s2。
追问这个我知道,就是不懂是不是String s=new String("abc");创建对象new String("abc");时是不是也在常量池同时创建一个常量 abc?
追答我的理解,常量池里面应该是只有char a,char b,char c等字符型的常量,在new String("abc")的时候先由char a、b、c先组成一个新的常量,然后赋给堆内存中新开辟的空间。