String s1 = "abc";//一个对象abc 在字符池里
String s2 = new String("abc");// 一个对象s2 在堆里,abc在1中以创建
看到空上贴子,我觉得和我理解得有差异,不知道是不是我错了,请高手们帮一下啊
我觉得第一行和我理解得一样,关键是第二个,我觉得是newString()创建了一个
对象在堆中,然后在池中创建abc时发现有相同的,则又复制了一个abc到池中,所以第
二句创建了两个对象,加上第一句的一共是三个, 这么理解对吗?期待中
String s2 = new String("abc");// 一个对象s2 在堆里,abc在1中以创建
看到空上贴子,我觉得和我理解得有差异,不知道是不是我错了,请高手们帮一下啊
我觉得第一行和我理解得一样,关键是第二个,我觉得是newString()创建了一个
对象在堆中,然后在池中创建abc时发现有相同的,则又复制了一个abc到池中,所以第
二句创建了两个对象,加上第一句的一共是三个, 这么理解对吗?期待中
楼主【lanesea】截止到2008-06-25 12:13:12的历史汇总数据(不包括此帖):
发帖数:3 发帖分:60
结贴数:3 结贴分:60
未结数:0 未结分:0
结贴率:100.00% 结分率:100.00%
敬礼!
String s2="abc";这时只有一个abc,s1和s2
都指向abc
但new String("abc")不是
应该重新创建一个吗
String s2 = new String("abc");// s2引用类型,指向堆里的对象,new 出来的都在堆里希望对你有帮助!^_^
是直接指向它还是再创建一个abc然后再指向 这个新创建的?
s2是个引用,指向"abc"
String s2 = new String("abc");//这里s2是重新创建的一个对象。和那个不是一回事。
发现池中已经有了abc(就是String s1 = "abc"创建的)//是,正确
是直接//不,不直接指向它
它还是再创建一个abc然后再指向 这个新创建的//是,就是这样子的。
是直接指向它还是再创建一个abc然后再指向 这个新创建的?
是的在字符池中如果发现有了”abc“就不创建了,像楼上说的
但是优化并不代表肯定会这样做呀
当执行第一句的时候,就会创建两个对象,因为首先会在字符串池里边查找是否有相同内容的字符串,如果有,就复制一份到堆中,否则就要先在字符串池里边创建这个字符串对象,然后再复制到堆中;
第二句,因为NEW 所以又创建了一个对象!!!因为字符串池里边已经有了那个对象,所以它不用再到字符串池里边去创建对象了。共计创建了三个对象吧~~~
加上
s1="xyz",你再看看s2的值是什么就知道了
String s2 = new String("abc");// 创建一个新的对象,跟s1没任何关系
因此字符池里有两个对象。
在堆中有一个new String()产生的初始对象!
谢谢谢谢,不对的请给小弟指点指点点