新人求指教JAVA中字符串 用 等号 进行比较的问题

Bro3Rd 2015-07-18 09:54:53
String s1="ab";
String s2="cd";

String s3=s1+s2;
String s4=s1+"cd";

s3==s4返回的是false,请问为什么是这样呢?
在做加号的时候,s3和s4的内存地址是怎么组织的呢?

求大神解答
...全文
231 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
鸣鸣Amadues 2015-07-19
  • 打赏
  • 举报
回复
引用 6 楼 Bro3Rd 的回复:
=,=学习了, 看来自己要学习的东西很多啊,java这种东西自己平时也没有系统的学习过,是从javaWeb项目中涉及的一点皮毛开始,就硬着头皮学了, 各位大神java是怎么学的呢
这种技术细节一般都不是开发的重点或者难点,只要碰到时了解下就可以了。
Bro3Rd 2015-07-18
  • 打赏
  • 举报
回复
=,=学习了, 看来自己要学习的东西很多啊,java这种东西自己平时也没有系统的学习过,是从javaWeb项目中涉及的一点皮毛开始,就硬着头皮学了, 各位大神java是怎么学的呢
securitit 2015-07-18
  • 打赏
  • 举报
回复
  楼上几位都没有说到点上啊!! Java对于String类型的+操作进行了特殊处理,若在系统编译初期不能确定String类型的值,在进行+操作时,内部是用StringBuilder进行字符串的连接,这种字符串操作在操作之后是存储在堆中的。 对于字符串常量的相加,例如String a = "a" + "b"; 这样的字符串的值是存储在栈中的,此时会有类似缓存机制,当两个值相同的时,引用的是同一块地址空间。 楼主的之所以==比较为false,是因为比较的是堆中内存,不会相等的,可以使用s3.intern()操作将堆中的值加入到栈内的常量池内,此时就会是相等的了。
飏飏一蝶 2015-07-18
  • 打赏
  • 举报
回复
s1,s2前加final会去引用常量池的,就会变成true.普通的string+会返回一个新的对象,而不会去常量池寻找。
鸣鸣Amadues 2015-07-18
  • 打赏
  • 举报
回复
说明地址变了呀。。
飏飏一蝶 2015-07-18
  • 打赏
  • 举报
回复
详情请阅读,字符串常量池。
Bro3Rd 2015-07-18
  • 打赏
  • 举报
回复
具体这两种加法,有什么区别呢?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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