为什么下面的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
Just try this
String s = "Buggy";
s = s.concat("Bread");
System.out.println(s);
>
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