1. public static void main(String[] args) {
    2. String str = new StringBuilder("ja").append("va").toString();
    3. System.out.println(str == str.intern());//false
    4. System.out.println("=====================================================");
    5. String str2 = new StringBuilder("red").append("is").toString();
    6. System.out.println(str2 == str2.intern());//true
    7. }

    输出结果为什么不一样?
    原因:
    面试题踩坑之String - 图1
    面试题踩坑之String - 图2
    实际上Version类里面已经有了一个定义好的字符串java,所以我们new出来的,和人家的实际上并不是同一个,此外,Version类里面的其他几个字符串也一样是如此的。详情参照《深入理解java虚拟机》第三版。