后天笔试去,问个问题,顺便散分,祝我好运
还是老掉牙的问题 String s = new String("abc");
为什么创建的是两个对象呢
我看有人说是 两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。
引用也是对象吗?这句话创建是这样的吗
1) 栈中开辟一块空间存放引用s,
2) 堆中开辟一块空间存放一个新建的String对象"abc",
3) 引用s指向堆中的新建的String对象"abc",
那个引用算对象吗,算的话那任何一个new出来的岂不都是两个对象了
如果两次用String s1 = new String("s1");
String s2 = new String("s2");
那么第二个语句也是两个对象吗?
我后天去用友在北航的宣讲会,各位前辈有什么能指点一下的吗?谢谢
[解决办法]
引用当然算一个对象
[解决办法]
我估计一个对象一个引用这些人全是背出来的,根本没理解原理。
这种问题要分情况讨论。
String s = new String("abc");
如果String池里没有"abc". 那么
1. jvm会在String池里开辟一个String对象存放"abc"。跟String s = "abc" 道理一样。
2. String池中创造好"abc"之后就执行new 操作,在堆内存中开辟一个空间存放new出来的String对象。其实上你new出来的String对象里维护的char数组是指向String池里的"abc"对象里的char数组。 这种情况下你创建的是两个对象。
如果String池里已经有"abc"了。
什么都不说了,直接上面的第二步。
[解决办法]
String s = new String("abc");
如果只有这一句,的确是两个对象。
一个是常量池中的"abc" , 一个是堆内存中的"abc".
强调一点:引用不是对象!
具体这类问题,网上资料比较多。
我是来拿分的,嘻嘻...
[解决办法]
可以看看这个!祝楼主好运!
http://topic.csdn.net/u/20120607/07/9D3A5948-CA38-4EB9-A4F8-63400B34E13A.html
[解决办法]
我看有人说是 两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。
应该是
一个是“abc”,一个是指向“abc”的引用对象s。
[解决办法]
[解决办法]
人生苦短,不怕不怕