String a ="123";
String b =new String("456");
对于a来说,栈中存有a的地址,string池中存在“123”。
对于b来说,栈中存有b的对象在堆中的地址,New String()的对象存在堆中,那么我想请问,对于b新建的string对象的值“456”存在哪里?请各位大侠给解释一下。谢谢
String b =new String("456");
对于a来说,栈中存有a的地址,string池中存在“123”。
对于b来说,栈中存有b的对象在堆中的地址,New String()的对象存在堆中,那么我想请问,对于b新建的string对象的值“456”存在哪里?请各位大侠给解释一下。谢谢
第一个 是a
第二个 是b
第三个 是new String("456")这三个对象都放在哪? 当然是放在内存中了 看得出new String("456")很快会被垃圾收集器给清理掉
如果是前者,那你就研究去吧,如果是后者 那让sun的人研究去
1+1=2
为什么不等于3?
string b = new string("456");
在java中,带" "修饰的变量叫做字符串字面量,所有的字符串字面量都是放在字符串池中的(字符串池中的变量是共享的),也就是说,上面两条语句中的123和456都是字符串字面量,所以,它们都在池中,而b使用的new关键字,new关键字把所有产生的对象放在堆区里,也就是说,除了池中有456,堆区中还有一个456,二者是不同的,而堆中的变量是不共享的,
所以,如果我string c = new string("456");堆中就会出现第二个456,
所以,本题中,a的对象放在池中,b new出的对象放在堆中。我还专门画了个图,但是这里黏贴不上啊,我上传到我的资源里了,不知道你能不能看到