请问String s="asdf"等价与String s=new String("asdf")吗?区别究竟何在?最好用程序解答。

whunlay 2005-03-12 05:22:06
rt
...全文
239 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
javagodness 2005-03-13
  • 打赏
  • 举报
回复
第一个s指向了"asdf",有点超级链接的感觉。
而第二个则是类似复制了一个“asdf”,类似复制功能。
我仅仅是用最普通的形象语言来描述的。这个样子便于理解。
yx_018 2005-03-13
  • 打赏
  • 举报
回复

编译器会为它遇到的每一个字符串直接值,也就是双引号括起来的
字符串常量都自动的创建一个字符串对象。

String s="asdf";//只创建一个字符串
String s=new String("asdf");// 创建两个字符串

所以说前者比后者更高效
enrico 2005-03-12
  • 打赏
  • 举报
回复
String s="asdf"在结果上等价于String s=new String("asdf"),但是前者效率高于后者。由于Java会自动为一个字符串常量生成一个String对象,所以后者实际生成2个字符串
jverson 2005-03-12
  • 打赏
  • 举报
回复
第一句:hello放在常量栈中,故s1和s2指向同一地址

第二句:s1,s2指向不同的地址,用new的话每次都要新建地址空间


就是这个意思
yyy 2005-03-12
  • 打赏
  • 举报
回复
顶,学习
whobillion 2005-03-12
  • 打赏
  • 举报
回复
同意 quiton(蛛蛛)
追求自由 2005-03-12
  • 打赏
  • 举报
回复
楼上说的很有道理
Pthinker 2005-03-12
  • 打赏
  • 举报
回复
String s1="hello";
String s2="hello";
s1和s2是同一个对象

String s1=new String("abc");
String s2=new String("abc");
s1和s2不是同一个对象
------------------------------------------

第一句:hello放在常量栈中,故s1和s2指向同一地址

第二句:s1,s2指向不同的地址,用new的话每次都要新建地址空间
jwbecalm 2005-03-12
  • 打赏
  • 举报
回复
创建一个对象一般要用new
这样初始化:String s=new String("asdf");
但String 有点特殊,能用双引号中的文字初始化:String s="asdf";
quiton 2005-03-12
  • 打赏
  • 举报
回复
String s1="hello";
String s2="hello";
s1和s2是同一个对象

String s1=new String("abc");
String s2=new String("abc");
s1和s2不是同一个对象
oneonone 2005-03-12
  • 打赏
  • 举报
回复
http://fanqiang.chinaunix.net/a4/b5/20011114/0708001563.html

62,614

社区成员

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

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