Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么两个字符串对象的串联引用不等于同一个内容字符串对象_Java_String - Fatal编程技术网

Java 为什么两个字符串对象的串联引用不等于同一个内容字符串对象

Java 为什么两个字符串对象的串联引用不等于同一个内容字符串对象,java,string,Java,String,为什么下面的s3和s5String对象不同,当s5尝试在字符串池中创建时,它检查内容s3已经有相同的内容,所以s5引用字符串池中的s3对象。但我的假设是错误的,那么任何人都会纠正我 String s1 = "Buggy"; String s2 = "Bread"; String s3 = "BuggyBread"; String s4 = "Buggy" + "Bread&qu

为什么下面的
s3
s5
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
  • String s4=“童车”+“面包”

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

  • 字符串s5=s1+s2

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

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

  • s5不在字符串池中。请阅读@Jon Skeet answer<代码>字符串池仅用于常量字符串,除非您调用intern。
    因此
    s3
    在池中,
    s5
    在heapThanQ manouti。。!谢谢你的解释
     Just try this   
      String s = "Buggy";
      s = s.concat("Bread");
      System.out.println(s);