String的intern问题

为什么最后一个return true?不是和前两个一模一样吗
我试了试换位置,还是str3那里返回true,跟位置也无关啊,str1也用了append,为什么是false,而str3是true,有什么区别?

img

java是被预加载到常量池的
hello world不是
intern方法会把字符串放到常量池,并返回常量池的地址
但是jdk7之后有一点改动,如果该字符串已经在堆了,就不会重新在常量池创建一个字符串了,而是直接使用堆中的内存地址
所以第三个 helloworld在堆里 所以是true
还有就是上面说的 java应该是关键字,直接就加载到常量池了 str1是堆中的内存地址,所以为false