[讨论] 一道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

Global site tag (gtag.js) - Google Analytics