[讨论] 一道Java笔试题
QM42977
2010-09-28
今天看了会Java笔试题,其中有一道令我有点疑惑:
问题:String s = new String("xyz");创建了几个String Object? 答案:两个(一个是“xyx”,一个是指向“xyx”的引用对象s) 人个认为这个答案不正确,应该是三个(如果包括对象引用s),"xyz"在perm gen应该还会生成一个对象,因为常量("xyz")都会保存在perm gen中,在调用invokespecial时才会有参数。 不知我的分析是否正确,还望哪个高手指正指正。 |
|
mercyblitz
2010-09-28
你的标准答案有问题,这里只有两个一个是“xyx”,另外一个是new String("xyx")。 String s只是一个引用变量。 |
|
RednaxelaFX
2010-09-29
嗯回复在Java版了,请参考:http://www.iteye.com/topic/774673
|
|
allenhooo
2010-12-31
一个办法,看字节码:
0: new #3; //class java/lang/String //只调用了一次new 3: dup 4: ldc #4; //String xyz 6: invokespecial #5;//Method java/lang/String."<init>":(Ljava/lang/String;)V 9: astore_1 |