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

时间:2015-05-16 11:31:54

标签: java string core

为什么以下s3s5 String对象不同,当s5尝试在字符串池中创建时,它会检查内容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

2 个答案:

答案 0 :(得分:8)

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

    编译器非常聪明,意识到这只是BuggyBread中引用的常量s3。换句话说,s4引用字符串池中与String相同的s3

  2. String s5 = s1 + s2;

    这里编译器忠实地转换为基于StringBuilder的变量内容的串联,产生差异引用而不是s3。换句话说,这类似于:

    StringBuilder sb = new StringBuilder(s1);     
    sb.append(s2);
    String s5 = sb.toString();
    

答案 1 :(得分:0)

 Just try this   
  String s = "Buggy";
  s = s.concat("Bread");
  System.out.println(s);