黑马程序员技术交流社区

标题: 为什么String s=new String("xyz");创建了2个String Object [打印本页]

作者: 闫玉泉    时间: 2012-2-27 08:30
标题: 为什么String s=new String("xyz");创建了2个String Object
本帖最后由 闫玉泉 于 2012-2-27 17:56 编辑

哪两个String Object
作者: b_boywindy    时间: 2012-2-27 09:49
相当于 String s = new String("xyz"); 和 String ss = "xyz";   也就是说他们在内存的地址不同 所以s==ss 是false  可是他们的值是相同的  s.equals(ss)  是 true的    希望你能看懂  
作者: 仵先进    时间: 2012-2-27 10:05
new String("xyz"); //这个表达式创建一个隐含的对象
String s ; //这个表达式创建一个对象s,就把上面创建对象的地址赋值对象s
作者: 雷楚光    时间: 2012-2-27 10:38
String s=new String("xyz"); 你的分成2段来看,
首先有个object s=null, 然后new String("xyz")有创建了个object,然后把这个object附加到前面的object上
实际上应该是new String("xyz"); String s="xyz";
这样就应该懂了。
作者: 李会启    时间: 2012-2-27 12:37
常量池中只可能只有一个“xyz”,但是堆中可能有多个,因为你这里用了new String来强制在堆中再创建了一个对象,所以是两个;如果是String s= "xyz"这样的,s这个引用就会直接指向常量池的"xyz",而不会是指向你在堆中创建的“xyz”。
作者: 夕阳┄漫步ぎ    时间: 2012-2-27 12:47
一个是字符串字面量"xyz"所对应的、驻留(intern)在一个全局共享的字符串常量池中的实例,另一个是通过new String(String)创建并初始化的、内容与"xyz"相同的实例
作者: 泮和顺    时间: 2012-2-27 13:09
仵先进 发表于 2012-2-27 10:05
new String("xyz"); //这个表达式创建一个隐含的对象
String s ; //这个表达式创建一个对象s,就把上面创建 ...

后面应该是赋值吧 赋值完临时隐含的对象会自己消失吧




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