A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 lvwenwen88 于 2012-1-3 14:21 编辑

String s = new String("xyz");创建了几个String Object?

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

13 个回复

倒序浏览
如果常量池中没有xyz,就是2个,一个在常量池里一个在堆heap里,
如果常量池里有xyz串那就是1个,在heap里

评分

参与人数 1技术分 +1 收起 理由
杨强 + 1

查看全部评分

回复 使用道具 举报
两个,JAVA中把"xyz"本身看成一个对象,你再用new String("xyz");就又创建一了个新的对象,JAVA会在内存中分别为"xyz"和new String("xyz')各开辟独立的空间。

评分

参与人数 1黑马币 +6 收起 理由
杨强 + 6

查看全部评分

回复 使用道具 举报
两个,一个是字符串字面量"xyz"所对应的、驻留(intern)在一个全局共享的字符串常量池中的实例,另一个是通过new String(String)创建并初始化的、内容与"xyz"相同的实例。
回复 使用道具 举报
会创建2个对象,一个xyz,在JAVA中,JVM会在内存中创建个常量池,用来存储常量的,String x=xyz;我们应该尽量使用这种方法,这样会先到常量池去找xyz,如果有的话,付给他,如果没有,会在常量池中创建xyz,而用new String的话,会在堆中创建一个对象,然后指向了常量池的xyz,这样效率低下,本身String是一个引用类型,但是这个类型在开发中很常用所以,为了节省效率,java设置成这样。
回复 使用道具 举报
我觉得只要是new肯定在内存中分配一块出来,所以new就一个对象
回复 使用道具 举报
两个对象,一个是“xyz”,一个是指向“xyz”的引用对象s

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
左华清 发表于 2012-1-2 23:37
两个对象,一个是“xyz”,一个是指向“xyz”的引用对象s

恩,谢谢了,学习
回复 使用道具 举报
想好了再写 发表于 2012-1-2 19:05
会创建2个对象,一个xyz,在JAVA中,JVM会在内存中创建个常量池,用来存储常量的,String x=xyz;我们应该 ...

非常感谢,讲解很仔细
回复 使用道具 举报
为梦而战 发表于 2012-1-2 17:26
两个,JAVA中把"xyz"本身看成一个对象,你再用new String("xyz");就又创建一了个新的对象,JAVA会在内存中 ...

谢谢,学习了
回复 使用道具 举报
罗利民 发表于 2012-1-2 17:18
如果常量池中没有xyz,就是2个,一个在常量池里一个在堆heap里,
如果常量池里有xyz串那就是1个,在heap里
...

一个在常量池里一个在堆heap里,
如果常量池里有xyz串那就是1个,在heap里
谢谢
回复 使用道具 举报
为梦而战 发表于 2012-1-2 17:26
两个,JAVA中把"xyz"本身看成一个对象,你再用new String("xyz");就又创建一了个新的对象,JAVA会在内存中 ...

JAVA中把"xyz"本身看成一个对象,你再用new String("xyz");就又创建一了个新的对象
谢谢,创建了2个对象
回复 使用道具 举报
lvwenwen88 发表于 2012-1-4 11:27
JAVA中把"xyz"本身看成一个对象,你再用new String("xyz");就又创建一了个新的对象
谢谢,创建了2个对象 ...

:handshake
回复 使用道具 举报
想好了再写 发表于 2012-1-2 19:05
会创建2个对象,一个xyz,在JAVA中,JVM会在内存中创建个常量池,用来存储常量的,String x=xyz;我们应该 ...

谢谢,讲的非常详细
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马