为什么两个字符串对象的连接引用不等于相同的内容字符串对象

Siv*_*mar 2 java string core

为什么下面s3s5 String对象不同,当s5尝试在String池中创建时,它检查内容s3已经具有相同的内容,因此在字符串池中s5引用s3对象.但我的假设是错误的,那么任何人都应该纠正我.

       String s1="Buggy";
       String s2="Bread";

       String s3="BuggyBread";

       String s4 = "Buggy"+"Bread"; 
       String s5 = s1 + s2 
     System.out.println(s3==s4); // True
     System.out.println(s3==s5); //false
Run Code Online (Sandbox Code Playgroud)

man*_*uti 8

  1. String s4 = "Buggy" + "Bread";

    编译器足够智能,可以实现这只是BuggyBread已经引用的常量s3.换句话说,s4引用相同Strings3是在字符串池.

  2. String s5 = s1 + s2;

    在这里,编译器忠实地转换为StringBuilder基于变量内容的基于串联的连接,这产生了差异引用s3.换句话说,这类似于:

    StringBuilder sb = new StringBuilder(s1);     
    sb.append(s2);
    String s5 = sb.toString();
    
    Run Code Online (Sandbox Code Playgroud)