java == equals()问题,求教下面是为什么?

轮回中少我一人 2017-10-04 05:02:10
...全文
425 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010222066 2017-10-13
  • 打赏
  • 举报
回复
1楼答的不错
jaramyZXG 2017-10-12
  • 打赏
  • 举报
回复
创建s2的时候. Java机制肯定是先去查找内存中是否有这个字符串的内存地址,如果有则指向,没有才创建。后两个就不用说了
zz11style 2017-10-08
  • 打赏
  • 举报
回复
从控制台输入的时候,地址是不同的
李德胜1995 2017-10-08
  • 打赏
  • 举报
回复
一个人L 2017-10-08
  • 打赏
  • 举报
回复
你从控制台输入一个字符串相当于new String()所以s3的地址时不同的。
水货丶 2017-10-07
  • 打赏
  • 举报
回复
s1和s2都不是通过new关键字创建的字符串,所以这两个引用指向的字符串都不是堆中的,而是在常量池中的“aaa”,编译器优化后,它们是指向同一个在常量池中的“aaa”. s3是通过控制台读取的输入,next()方法返回一个String,这个String应该是在堆中根据输入的字符串创建的。因此s1和s2的引用是相同的,s3的引用指向的是堆根据输入新创建的字符串,和s1,s2指向的常量池中的肯定不同。String类重写了equals()方法,比较的是字符串中每个字符是否相同,s1和s3每个字符都相同,因此返回true.
  • 打赏
  • 举报
回复
s1和s2不是new出来的,而且它们指向的内容一致,所以就指向了相同的内存地址,都指向"abc"。 s3是通过键盘输入的,相当于是new出来的,这个时候是直接分配一个新的内存地址,虽然还是指向"abc",但是这个"abc"和上面那个"abc"不在同一个地址。 至于equals方法,只判断指向的内容是否相同,不判断地址是否相同。
ascarl2010 2017-10-04
  • 打赏
  • 举报
回复
百度贴吧也看到同样的问题
zhaofengtxlxz 2017-10-04
  • 打赏
  • 举报
回复
s1和s2都不是通过new关键字创建的字符串,所以这两个引用指向的字符串都不是堆中的,而是在常量池中的“aaa”,编译器优化后,它们是指向同一个在常量池中的“aaa”. s3是通过控制台读取的输入,next()方法返回一个String,这个String应该是在堆中根据输入的字符串创建的。因此s1和s2的引用是相同的,s3的引用指向的是堆根据输入新创建的字符串,和s1,s2指向的常量池中的肯定不同。String类重写了equals()方法,比较的是字符串中每个字符是否相同,s1和s3每个字符都相同,因此返回true.

62,614

社区成员

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

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