黑马程序员技术交流社区

标题: String s=new String("abc")和String s="abc"的区别 [打印本页]

作者: java冬冬    时间: 2013-5-13 10:04
标题: String s=new String("abc")和String s="abc"的区别
本帖最后由 java冬冬 于 2013-5-13 14:47 编辑

我们知道,String s=new String("abc")和String s="abc"都可以定义String类型的对象,那么这两个在使用的时候有什么区别呢?我们该在什么时候选择哪一个更好?还是都一样?求解送吻{:soso_e152:}送金币
作者: 吴文彬    时间: 2013-5-13 10:08
第一句是使用new在堆内存中创建字符串对象,每一个新创建的对象都是唯一的,所以返回堆内存中的唯一的地址。
第二句属于字符串常量赋值,jvm是先去检查字符串常量池,如果常量池中没有"abc"这个字符串,则在String常量池中创建,并返回该字符串在常量池中的地址;如果常量中有"abc"这个字符串,直接返回该字符串在常量池中的地址。如果字符串被创建在string常量池中,有且只有一份,返回常量池中的地址。
作者: 白磊    时间: 2013-5-13 10:13
String s=new String("abc")      这一句是定义了一个String类型的引用对象s,并新建了一个真正的String类型的对象“abc”,他保存在吨内存中。引用对象保存的是这个真实对象的地址。通过这个引用可以找到这个真实对象。

String s="abc"   这一句是没有新建一个对象的,这个“abc”对象时在对象池中取到的。

一般如果只是想要随便用那些字符串的时候,就可以直接这样写就行了String s="abc";     如果是需要用某些字符串来构建一个新的String类型的对象的时候,就要用第一种了。这是我的理解哦。
作者: java冬冬    时间: 2013-5-13 14:48
吴文彬 发表于 2013-5-13 10:08
第一句是使用new在堆内存中创建字符串对象,每一个新创建的对象都是唯一的,所以返回堆内存中的唯一的地址 ...

多谢多谢,一起加油!{:soso_e152:}
作者: java冬冬    时间: 2013-5-13 14:49
白磊 发表于 2013-5-13 10:13
String s=new String("abc")      这一句是定义了一个String类型的引用对象s,并新建了一个真正的String类 ...

多谢多谢,一起加油!{:soso_e152:}




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