小知识:关于String的创建

下面程序的输出结果,参考代码中的注释,原因也在其中。

public class MyDemo {
    public static void main(String[] args) {
        String s1 = "Programming";
        String s2 = new String("Programming");
        String s3 = "Program";
        String s4 = "ming";
        String s5 = "Program" + "ming";
        String s6 = s3 + s4;
        System.out.println(s1 == s2);  // false 因为一个在常量池中,一个在堆内存中 
        System.out.println(s1 == s5);  //  true 因为都在常量池中
        System.out.println(s1 == s6);  // false 字符串的+操作其本质是创建了StringBuilder对象进行append操作,即s6在堆内存中
        System.out.println(s1 == s6.intern()); // true 因为intern方法会得到字符串对象在常量池中对应的版本的引用
        System.out.println(s2 == s2.intern()); // false 因为s2本身在堆内存中
    }
}

 关于StringBuilder、StringBuffer与String的差别就不多讲了。

原文地址:https://www.cnblogs.com/nayitian/p/14979822.html