Java String

希望能有人解答一下这个问题
这样输出是true

img


img


改一下这样也是true

img


这样变成false了,为什么拼接 "ja" 和 "va" 就为false呢

img


img


但是同学的电脑拼接 "ja" 和 "va" 却没有这个问题,是true

  1. 按理说这里应该是true,这里为什么为false是因为程序在编译期时就已经加载来java这个字符串到常量池中了(在System类中的Version.init
    中有一个常量就是launcher_name定义的就是java)。

  2. 在jdk7环境后,正常加载是ja,va进入常量池,StringBuilder链接字符串后加入到了java堆中当str2调用intern方法后,会先去常量池中查看是否有java字符串常量。
    有,那返回常量池中的地址;
    没有,那就会将java堆中的对象地址引入常量池中,再将这个引用地址返回。

  3. 所以正常情况下应该是true。而判断java是因为程序运行编译期已经加载所以就导致一个是地址不一样。