String s1 = "hello"; String s2 = s1; String s3 = "he"; s3 += "llo"; System.out.println(s1 == s2); //为什么不想等? System.out.println(s1 == s3); System.out.println(s1.equals(s3));
String一个奇怪的地方
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- bohemia 2008-11-20 15:43关注
让我想起Python中的"一切皆对象";
想到了C++中的操作符重载;你的情况上面的帖子讨论了很多,看了应该很有帮助;
== 是引用的比较;
equal 是数值的比较;a = "1";
b = "1";a 和 b 同时引用的 "1" ,所以 == 返回true;
[quote]s3 += "llo"; [/quote]
应该可以理解为:
tmp = new String();
tmp = s3+"llo"; // tmp = "he" + "llo";
s3 = tmp;
return s3;
此时S3引用了JVM创建的新的String对象, 可根据HashCode,显示是不同对象的;
所以S1.equals(S3) 但 == 并不返回 truehttp://wdmcln.iteye.com/blog/136268 这篇文章也不错;
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 chemex:docker安装chemex过程中遇到问题
- ¥15 关于遇到一个python,django,redis,uwsgi,nginx搭的一个企业微信修改AD密码的平台的问题!
- ¥15 读取parquet文件某一列的数据但是输出是整个列名和格式
- ¥15 机动目标 制导律建模问题
- ¥100 求Java socks 转发实现Demo
- ¥20 随身WiFi移动网络访问不了
- ¥50 RAD_XE11.3获取android11手机的IMEI码
- ¥15 linux的gcc命令报错
- ¥20 如何再GIS用海岸线建立缓冲区
- ¥15 codeblock遇到问题了,求帮助😭