String str = new String("xyz");创建了多少个对象????????????????????????????

时间:2021-05-22 16:15:15
今天碰到这个面试题,我写2个。一个是new String的时候会创建一个字符串对象,"xyz"也是一个对象,他是保存在字符串池中的。

网上有好多种说法,有点说是1个,有的是2个。。还有没有其他的?? String str = new String("xyz");创建了多少个对象????????????????????????????

11 个解决方案

#1


两个 一个栈中的引用对象 一个堆中的内存地址保存的对象

#2


该回复于2014-02-13 08:31:00被管理员删除

#3


引用 1 楼 magi1201 的回复:
两个 一个栈中的引用对象 一个堆中的内存地址保存的对象

你是说str算一个,str存放的地址所对应的空间算一个??我觉得str不能算对象吧,他只是一个变量而已。new String才算是一个对象。

#4


引用 3 楼 bill0605030109 的回复:
Quote: 引用 1 楼 magi1201 的回复:

两个 一个栈中的引用对象 一个堆中的内存地址保存的对象

你是说str算一个,str存放的地址所对应的空间算一个??我觉得str不能算对象吧,他只是一个变量而已。new String才算是一个对象。
String str = new String("xyz");创建了多少个对象???????????????????????????? 个人理解,其实堆栈里面就那么回事 哈哈 个人理解通就好了 

#5



“xyz”是一个匿名对象。
new String() 一个。
str不是对象,是一个变量,只是指向new String() 的地址。

#6


两个或一个,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,它一句那个常量”xyz”对象的内容来创建出一个新String对象。如果以前就用过’xyz’,这句代表就不会创建”xyz”自己了,直接从缓冲区拿。

#7


尼玛又来了,月经贴里面有了!!

#8


对于出这种题的,我只想说去年买了个表。
人家jdk实现一改答案又不一样了。面试官是不是还停留在JDK1.4

#9


引用 5 楼 u012463264 的回复:
“xyz”是一个匿名对象。
new String() 一个。
str不是对象,是一个变量,只是指向new String() 的地址。

那跟我的说法差不多了。。

引用 6 楼 SDN_SUPERUSER 的回复:
两个或一个,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,它一句那个常量”xyz”对象的内容来创建出一个新String对象。如果以前就用过’xyz’,这句代表就不会创建”xyz”自己了,直接从缓冲区拿。

恩恩差不多。。

引用 7 楼 huxiweng 的回复:
尼玛又来了,月经贴里面有了!!

哦哦。。

引用 8 楼 huxiweng 的回复:
对于出这种题的,我只想说去年买了个表。
人家jdk实现一改答案又不一样了。面试官是不是还停留在JDK1.4

额额。。

#10


这里挺详细的,希望对你有帮助:
http://blog.csdn.net/andychen314/article/details/50857313

#11


这里挺详细的,希望对你有帮助:
http://blog.csdn.net/andychen314/article/details/50857313

#1


两个 一个栈中的引用对象 一个堆中的内存地址保存的对象

#2


该回复于2014-02-13 08:31:00被管理员删除

#3


引用 1 楼 magi1201 的回复:
两个 一个栈中的引用对象 一个堆中的内存地址保存的对象

你是说str算一个,str存放的地址所对应的空间算一个??我觉得str不能算对象吧,他只是一个变量而已。new String才算是一个对象。

#4


引用 3 楼 bill0605030109 的回复:
Quote: 引用 1 楼 magi1201 的回复:

两个 一个栈中的引用对象 一个堆中的内存地址保存的对象

你是说str算一个,str存放的地址所对应的空间算一个??我觉得str不能算对象吧,他只是一个变量而已。new String才算是一个对象。
String str = new String("xyz");创建了多少个对象???????????????????????????? 个人理解,其实堆栈里面就那么回事 哈哈 个人理解通就好了 

#5



“xyz”是一个匿名对象。
new String() 一个。
str不是对象,是一个变量,只是指向new String() 的地址。

#6


两个或一个,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,它一句那个常量”xyz”对象的内容来创建出一个新String对象。如果以前就用过’xyz’,这句代表就不会创建”xyz”自己了,直接从缓冲区拿。

#7


尼玛又来了,月经贴里面有了!!

#8


对于出这种题的,我只想说去年买了个表。
人家jdk实现一改答案又不一样了。面试官是不是还停留在JDK1.4

#9


引用 5 楼 u012463264 的回复:
“xyz”是一个匿名对象。
new String() 一个。
str不是对象,是一个变量,只是指向new String() 的地址。

那跟我的说法差不多了。。

引用 6 楼 SDN_SUPERUSER 的回复:
两个或一个,”xyz”对应一个对象,这个对象放在字符串常量缓冲区,常量”xyz”不管出现多少遍,都是缓冲区中的那一个。New String每写一遍,就创建一个新的对象,它一句那个常量”xyz”对象的内容来创建出一个新String对象。如果以前就用过’xyz’,这句代表就不会创建”xyz”自己了,直接从缓冲区拿。

恩恩差不多。。

引用 7 楼 huxiweng 的回复:
尼玛又来了,月经贴里面有了!!

哦哦。。

引用 8 楼 huxiweng 的回复:
对于出这种题的,我只想说去年买了个表。
人家jdk实现一改答案又不一样了。面试官是不是还停留在JDK1.4

额额。。

#10


这里挺详细的,希望对你有帮助:
http://blog.csdn.net/andychen314/article/details/50857313

#11


这里挺详细的,希望对你有帮助:
http://blog.csdn.net/andychen314/article/details/50857313