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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 java冬冬 于 2013-5-13 14:47 编辑

我们知道,String s=new String("abc")和String s="abc"都可以定义String类型的对象,那么这两个在使用的时候有什么区别呢?我们该在什么时候选择哪一个更好?还是都一样?求解送吻{:soso_e152:}送金币

评分

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

查看全部评分

4 个回复

倒序浏览

回帖奖励 +2

第一句是使用new在堆内存中创建字符串对象,每一个新创建的对象都是唯一的,所以返回堆内存中的唯一的地址。
第二句属于字符串常量赋值,jvm是先去检查字符串常量池,如果常量池中没有"abc"这个字符串,则在String常量池中创建,并返回该字符串在常量池中的地址;如果常量中有"abc"这个字符串,直接返回该字符串在常量池中的地址。如果字符串被创建在string常量池中,有且只有一份,返回常量池中的地址。
回复 使用道具 举报
String s=new String("abc")      这一句是定义了一个String类型的引用对象s,并新建了一个真正的String类型的对象“abc”,他保存在吨内存中。引用对象保存的是这个真实对象的地址。通过这个引用可以找到这个真实对象。

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

一般如果只是想要随便用那些字符串的时候,就可以直接这样写就行了String s="abc";     如果是需要用某些字符串来构建一个新的String类型的对象的时候,就要用第一种了。这是我的理解哦。

评分

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

查看全部评分

回复 使用道具 举报
吴文彬 发表于 2013-5-13 10:08
第一句是使用new在堆内存中创建字符串对象,每一个新创建的对象都是唯一的,所以返回堆内存中的唯一的地址 ...

多谢多谢,一起加油!{:soso_e152:}
回复 使用道具 举报
白磊 发表于 2013-5-13 10:13
String s=new String("abc")      这一句是定义了一个String类型的引用对象s,并新建了一个真正的String类 ...

多谢多谢,一起加油!{:soso_e152:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马