String s = new String("abc");和String s = "abc";

eric06s 2007-04-23 06:09:54
String s = new String("abc");

String s;
s = "abc";

String s = "abc";
有什么区别
...全文
278 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dearhan 2008-09-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 brooksychen 的回复:]
String s = new String( "abc ");
是先在常量池中生成了一个字符串常量(若常量池中目前没有 "abc "),然后在heap中生成一个String对象,该对象的内容就是这个常量,然后才是String类型的引用s指向这个String对象。
[/Quote]
你的意思是不是说创建了3个对象?s是不是个对象?s里面保存的是string的地址吗?
crashguard 2007-04-23
  • 打赏
  • 举报
回复
用String s = "ABC";
不要用String s = new String("ABC");
前者有编译器控制优化,后者无故增加开销。
brooksychen 2007-04-23
  • 打赏
  • 举报
回复
你不觉得String s = "abc";这种形式比String s = new String("abc");这种形式使用起来简单吗?这不就是好处?另外,前者支持“+”的操作,即 s1 + s2,后者不支持。

而之所以String s = new String("abc");这种形式会存在,是因为java中的String是对象,应当有这种按照一般生成对象的方法来生成String对象,即用new关键词生成新对象。
eric06s 2007-04-23
  • 打赏
  • 举报
回复
各有什么好处和缺点阿
brooksychen 2007-04-23
  • 打赏
  • 举报
回复
String s = "abc";
是在常量池中生成了一个字符串常量(若常量池中目前没有"abc"),而引用s指向它。
String s = new String("abc");
是先在常量池中生成了一个字符串常量(若常量池中目前没有"abc"),然后在heap中生成一个String对象,该对象的内容就是这个常量,然后才是String类型的引用s指向这个String对象。
CrazyGou 2007-04-23
  • 打赏
  • 举报
回复
参考:http://blog.csdn.net/sunnyjavamoon/archive/2006/07/13/913599.aspx

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧