为了账号安全,请及时绑定邮箱和手机立即绑定

求大佬指点哈!java String

/ 猿问

求大佬指点哈!java String

料青山看我应如是 2019-08-21 20:09:52
Stringb="abcd"Stringa="a"Stringc="bcd"Stringd=a+csystem.out.println(d==b)//false为什么是false根据java字符串常量只能有一份的原则,应该是true才对。这里的内存图是什么样的
                    
查看完整描述

2 回答

?
慕盖茨1488219
String在比较值的时候需要用equals方法,b.equals(d)返回的是true,b的对象是"abcd"这个字符串的引用地址,而d是"a"和"bcd"拼接后的一个新对象,两个的引用地址不相同,所以==返回的是false,内存图得大神弄下,我也是菜鸡水平程序员。。。
                            
查看完整回答
反对 回复 2019-08-21
?
慕慕0277861
JAVA的字符串常量只能有一份的原则???
什么时候这种虚拟机优化,都能被当做原则了,我的天,谁给你保证的???
Stringd=a+c;
这个赋值当然是在这句执行的时候才会计算啊,计算出来的是一个新的变量,而不是字符串常量池里的那个。说起来,这里也有一个优化的问题,字符串拼接会被优化为类似于StringBuilder操作。你要非要说,为啥常量计算不直接编译的时候就能计算了,就完事了呗……这个是程序正确性的问题了,已经不是优化的问题了。
                            
查看完整回答
反对 回复 2019-08-21

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信