当前位置: 首页 > 知识库问答 >
问题:

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

平和雅
2023-03-14

为什么下面的s3s5String对象不同,当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个答案

施飞驰
2023-03-14
 Just try this   
  String s = "Buggy";
  s = s.concat("Bread");
  System.out.println(s);
孟子墨
2023-03-14

>

  • String s4="Buggy""Bread";

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

    字符串s5=s1 s2

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

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

  •  类似资料:
    • 但是,这并不适用于String类。请参见下面的代码: 这是因为字符串类和自声明类之间的差异吗?谢谢你的帮助!

    • 我试图在Windows控制台应用程序中下载azure Blob。当我构建和调试应用程序时,我的azure连接字符串引发了一个异常。这个字符串在我的其他ASP.NET应用程序中工作得很好。

    • 问题内容: 似乎以下代码应返回true,但返回false。 这有什么意义? 问题答案: 常规()和严格()相等之间的唯一区别是,严格相等运算符禁用类型转换。由于已经在比较两个相同类型的变量,因此使用的相等运算符的类型无关紧要。 不管您使用常规相等还是严格相等,对象比较仅 在您比较相同的精确对象时得出 。 也就是说,给定,,,但。 两个不同的对象(即使它们都具有零或相同的精确属性)也永远不会相等地进

    • 问题内容: 拥有Java代码 该字符串将分配在相同的内存位置(或多倍): 是否多次启动同一程序(并行)执行? 可能的答案: 我目前是C#开发人员(尽管在上个千年中使用Java编程)。 我之所以问这个问题,是因为我相信.NET CLR和Java(JVM)之间是相同的,我希望得到.NET应用程序的答案(但由于经常遇到的“应用程序”池术语而引起疑问)。 答案是 字符串 实习生池由同一JVM或.NET C

    • 问题内容: 阅读了SCJP Tip Line的作者Corey McGlone在javaranch网站上的文章后,我都感到困惑。从字面上看是Strings,由Kathy Sierra(javaranch的联合创始人)和Bert Bates共同编写的《 SCJP Java 6程序员指南》。 我将尝试引用Corey先生和Kathy Sierra女士对String Literal Pool的引用。 1.根

    • 问题内容: 这是以前有关Java中的String初始化的一些问题的后续问题。 在用Java进行了一些小测试之后,我面临以下问题: 为什么我可以执行此语句 当str2一个String对象初始化为,但我不能调用方法toString()上str2?那么Java如何将空字符串对象和字符串文字串联起来? 顺便说一句,我还尝试将一个初始化为null和字符串文字的Integer连接起来,”a_literal_s