日期:2014-05-20  浏览次数:20741 次

java的string的困惑?
String s = new String("xyz");创建了几个String Object? 答案是两个
,怎么理解啊,我的理解是new了一个空间(堆内存),把xyz放到堆内存中的,然后s是指向后面的一个引用,怎么题上是两个啊。怎么理解啊?


------解决方案--------------------
谁说是两个呀,我觉得你的理解是正确的。。
------解决方案--------------------
创建了2个对象,1个是字符串类型的"xyz"对象,另1个是字符串类型的对象s,它指象对象"xyz". new需要申请新的空间,所以又有一个.

------解决方案--------------------
s不是存放在栈里面的一个引用么,它指向堆里的对象'XYZ',s本身又不是存放在堆里的,怎么会是对象呢?
------解决方案--------------------
两个对象
------解决方案--------------------
2个 这问题在csdn回答很多次了
------解决方案--------------------
堆一个,池一个
------解决方案--------------------
学习中~~帮顶~~
------解决方案--------------------
当然是两个了,先在String pool中创建了一个,如果在堆内存中也创建了一个。然后把堆中的引用赋给s.
------解决方案--------------------
就是象 2楼中说的一样.
------解决方案--------------------
9楼说的就是跟7楼一样,池一个,堆一个。
然后将堆内存中的引用地址赋给S。
------解决方案--------------------
确实是两个。


------解决方案--------------------
学习中
------解决方案--------------------
String s = new String("xyz");
和String s = "xyz";是不一样滴,前者是2个,后者是1个
所以尽量用后者哈
------解决方案--------------------
见帖子

http://topic.csdn.net/u/20071214/14/17ccdb98-7424-45ad-a1d0-87e78143990d.html

讨论的很火

不用新开帖子了 

呵呵
------解决方案--------------------
顶 15 楼
的 和我的想法是一样的
但是一般都用 String s = "xyz"; 呵呵
------解决方案--------------------
答案可以是两个也可以是三个,两个的就不说了,对三个的做下解释,一个是"xyz"也可以算是一个字符串对象,加上以前的两个不就是三个了么?
------解决方案--------------------
我是这样理解的:

String s=new String("xyz");

"xyz"在这条语句中虽然只是一个参数,但是它本身就是一个匿名的String对象,在堆内存中就会有一个匿名的String对象。

new String("xyz")等于执行了String的构造函数String(String original),它就会初始化一个新创建的 String 对象,表示一个与该参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的一个副本。

所以是有两个对象。