日期:2014-05-17  浏览次数:20891 次

String str = new String("xyz");创建了多少个对象????????????????????????????
今天碰到这个面试题,我写2个。一个是new String的时候会创建一个字符串对象,"xyz"也是一个对象,他是保存在字符串池中的。

网上有好多种说法,有点说是1个,有的是2个。。还有没有其他的??
------解决方案--------------------
两个 一个栈中的引用对象 一个堆中的内存地址保存的对象
------解决方案--------------------

“xyz”是一个匿名对象。
new String() 一个。
str不是对象,是一个变量,只是指向new String() 的地址。
------解决方案--------------------
两个或一个,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,它一句那个常量”xyz”对象的内容来创建出一个新String对象。如果以前就用过’xyz’,这句代表就不会创建”xyz”自己了,直接从缓冲区拿。
------解决方案--------------------
对于出这种题的,我只想说去年买了个表。
人家jdk实现一改答案又不一样了。面试官是不是还停留在JDK1.4