求大佬指点哈!java String

Stringb="abcd"Stringa="a"Stringc="bcd"Stringd=a+csystem.out.println(d==b)//false为什么是false根据java字符串常量只能有一份的原则,应该是true才对。这里的内存图是什么样的
料青山看我应如是
浏览 366回答 2
2回答

长风秋雁

JAVA的字符串常量只能有一份的原则???什么时候这种虚拟机优化,都能被当做原则了,我的天,谁给你保证的???Stringd=a+c;这个赋值当然是在这句执行的时候才会计算啊,计算出来的是一个新的变量,而不是字符串常量池里的那个。说起来,这里也有一个优化的问题,字符串拼接会被优化为类似于StringBuilder操作。你要非要说,为啥常量计算不直接编译的时候就能计算了,就完事了呗……这个是程序正确性的问题了,已经不是优化的问题了。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript