1. public static void main(String[] args) {
    2. String a = "hello";
    3. String b = a + "world";
    4. String c = "helloworld";
    5. System.out.println(b==c);
    6. }

    image.png

    1. public static void main(String[] args) {
    2. String a = "helloworld";
    3. String b = "hello" + "world";
    4. System.out.println(a==b);
    5. }

    image.png

    1. public static void main(String[] args) {
    2. String a = "abc";
    3. String c = "abc";
    4. System.out.println(a == c);
    5. }

    image.png

    String str1 = new String(“abc”);
    Stirng str2 = “abc”;

    1. 虽然两个语句都是返回一个String对象的引用,但是jvm对两者的处理方式是不一样的。对于第一种,jvm会马上在heap中创建一个String对象,然后将该对象的引用返回给用户。对于第二种,jvm首先会在内部维护的strings pool中通过String equels 方法查找是对象池中是否存放有该String对象,如果有,则返回已有的String对象给用户,而不会在heap中重新创建一个新的String对象;如果对象池中没有该String对象,jvm则在heap中创建新的String对象,将其引用返回给用户,同时将该引用添加至strings pool中。注意:使用第一种方法创建对象时,jvm是不会主动把该对象放到strings pool里面的,除非程序调用 Stringintern方法
    public static void main(String[] args) {
        String s1 = new String("abc");
        String s2 = new String("abc");
        System.out.println(s1.equals(s2));
    
        StringBuffer stringBuffer1 = new StringBuffer("xyz");
        StringBuffer stringBuffer2 = new StringBuffer("xyz");
        System.out.println(stringBuffer1.equals(stringBuffer2));
    }
    

    image.png

    
    public static void main(String[] args) {
        String a = "abc";
        String c = "abc";
        System.out.println(a == c);
    
        String a1 = "zxc";
        String c1 = new String("zxc");
        System.out.println(a1==c1);
    
    
        String a2 = new String("rty");
        String c2 = new String("rty");
        System.out.println(a2==c2);
    }
    

    image.png