当使用双引号的时候就会在字符串常量池创建一个对象,new出来一个对象会在堆内存中产生一个,所以第一句话,产生两个对象
    下面的String s1 = “abc”,创建了0个对象,因为字符串常量池中已经有一个”abc”的对象了
    s1指的是字符串常量池中的对象,s2指的是堆内存中的”abc” 所以s1和s2的地址不一样,所以为false
    image.png
    第一题结果为false,因为s1和s2是堆内存中的对象,s3 = s2 + 常量池中的c,会在堆内存生成新的abc(属于s3对象) (不是双引号直接弄出来的,结果都在堆内存)
    image.png

    在out文件夹下,可以看到编译的过程(将class文件托进去即可)
    image.png
    由此可见java在编译的过程中将”a” + “b” + “c”自动将字符串在常量池中拼接了
    image.png