关于字符串常量的疑问

vivanboy 2004-09-03 09:02:07
String s1="hello";String s2="hello";
String s3=s2;
if (s1==s2){System.out.println("OK");} // print OK
s2 += "aa";
s1 += "aa";
if (s1.equals(s2)){System.out.println("OK");} // print OK
if (s1==s2){System.out.println("OK");} // no print
System.out.println(s3); // print hello

疑问:
(1)为什么第一次打印OK,第三次打印却不同?
(2)s3应该和s2指向同一内存啊,为什么第四次打印却仍然是hello
...全文
89 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyfoxx 2004-09-03
  • 打赏
  • 举报
回复
up
vivanboy 2004-09-03
  • 打赏
  • 举报
回复
哦,明白了,String类比较特殊啊
hui3zhihui 2004-09-03
  • 打赏
  • 举报
回复
s2 += "aa";
s1 += "aa";里面的+相当于new操作
Tasia 2004-09-03
  • 打赏
  • 举报
回复
(1)开始的时候,内存中只有一个地方存放着"hello",s1和s2都指向这块内存,所以第一次打印了OK。
后来,s1,s2都改变了。因为String都是静态的,所以s2 += "aa";和s1 += "aa";都分别新建了新的String。这时s1,s2分别指向了新的对象,它们就是不同的了。
(2)同上面的,s2指向了新的内存区域。s3没有改变。
vivanboy 2004-09-03
  • 打赏
  • 举报
回复
String s3=s2;
不就是拷贝s2这个reference么?怎么会不是指向同一个内存
pchobby 2004-09-03
  • 打赏
  • 举报
回复
s1和s2根本没有指向同一内存区域啊
vivanboy 2004-09-03
  • 打赏
  • 举报
回复
还有java里面的hash Code有何意义?

62,614

社区成员

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

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