黑马程序员技术交流社区

标题: String s = new String("xyz");创建了几个String Object? [打印本页]

作者: lvwenwen88    时间: 2012-1-1 17:36
标题: String s = new String("xyz");创建了几个String Object?
本帖最后由 lvwenwen88 于 2012-1-3 14:21 编辑

String s = new String("xyz");创建了几个String Object?
作者: 罗利民    时间: 2012-1-2 17:18
如果常量池中没有xyz,就是2个,一个在常量池里一个在堆heap里,
如果常量池里有xyz串那就是1个,在heap里

作者: 为梦而战    时间: 2012-1-2 17:26
两个,JAVA中把"xyz"本身看成一个对象,你再用new String("xyz");就又创建一了个新的对象,JAVA会在内存中分别为"xyz"和new String("xyz')各开辟独立的空间。
作者: 于海生    时间: 2012-1-2 18:40
两个,一个是字符串字面量"xyz"所对应的、驻留(intern)在一个全局共享的字符串常量池中的实例,另一个是通过new String(String)创建并初始化的、内容与"xyz"相同的实例。

作者: 想好了再写    时间: 2012-1-2 19:05
会创建2个对象,一个xyz,在JAVA中,JVM会在内存中创建个常量池,用来存储常量的,String x=xyz;我们应该尽量使用这种方法,这样会先到常量池去找xyz,如果有的话,付给他,如果没有,会在常量池中创建xyz,而用new String的话,会在堆中创建一个对象,然后指向了常量池的xyz,这样效率低下,本身String是一个引用类型,但是这个类型在开发中很常用所以,为了节省效率,java设置成这样。
作者: 沈样    时间: 2012-1-2 19:12
我觉得只要是new肯定在内存中分配一块出来,所以new就一个对象
作者: 左华清    时间: 2012-1-2 23:37
两个对象,一个是“xyz”,一个是指向“xyz”的引用对象s
作者: lvwenwen88    时间: 2012-1-3 14:22
左华清 发表于 2012-1-2 23:37
两个对象,一个是“xyz”,一个是指向“xyz”的引用对象s

恩,谢谢了,学习
作者: lvwenwen88    时间: 2012-1-4 11:24
想好了再写 发表于 2012-1-2 19:05
会创建2个对象,一个xyz,在JAVA中,JVM会在内存中创建个常量池,用来存储常量的,String x=xyz;我们应该 ...

非常感谢,讲解很仔细
作者: lvwenwen88    时间: 2012-1-4 11:25
为梦而战 发表于 2012-1-2 17:26
两个,JAVA中把"xyz"本身看成一个对象,你再用new String("xyz");就又创建一了个新的对象,JAVA会在内存中 ...

谢谢,学习了
作者: lvwenwen88    时间: 2012-1-4 11:26
罗利民 发表于 2012-1-2 17:18
如果常量池中没有xyz,就是2个,一个在常量池里一个在堆heap里,
如果常量池里有xyz串那就是1个,在heap里
...

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

JAVA中把"xyz"本身看成一个对象,你再用new String("xyz");就又创建一了个新的对象
谢谢,创建了2个对象
作者: 为梦而战    时间: 2012-1-4 11:37
lvwenwen88 发表于 2012-1-4 11:27
JAVA中把"xyz"本身看成一个对象,你再用new String("xyz");就又创建一了个新的对象
谢谢,创建了2个对象 ...

:handshake
作者: lvwenwen88    时间: 2012-1-5 11:26
想好了再写 发表于 2012-1-2 19:05
会创建2个对象,一个xyz,在JAVA中,JVM会在内存中创建个常量池,用来存储常量的,String x=xyz;我们应该 ...

谢谢,讲的非常详细




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2