java - java中字符串常量的连接

标签 java string constants

<分区>

在 C++ 中,我知道创建多行字符串的最佳规范方法是创建相邻字符串并让编译器在编译时连接它们,如下所示:

string s = "This is a very long string ...\n"
   " and it keeps on going...";

在 Java 中,我知道的唯一方法是连接:

String s = "This is a very long string ...\n" +
   " and it keeps on going...";

问题是,这会在运行时生成单个字符串,还是 java 实际上也在编译时连接?问题出现的原因是由于以下行为:

String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); // this prints true, because the compiler
// generates only one "abc" object
String s3 = "a";
s3 += "bc";
System.out.println(s1 == s3); // false

最佳答案

String s3 = "a";
s3 += "bc";

等同于:

String s3 = "a";
s3 = new StringBuilder().append(s3).append("bc").toString();

因此它创建了一个新的 String 实例。

你甚至可以尝试:

String s = null;
s += null;
System.out.println(s); // prints "nullnull"

关于java - java中字符串常量的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29654950/

相关文章:

c++ - 为给定的字符串生成所有可能的回文

PHP 常量数组访问

java - 修复记录: Cell information from worksheet created

java - 我们如何在下面的格式中设置日期?

java.lang.noclassdefounderror : com. google.android.gms.R$styleable 对我没有任何帮助

java - 如何将字符串与字符序列交错

.net - 读取大文本文件直到某个字符串

java - 在 Java 中声明项目常量的正确方法是什么?

opengl - GLSL 着色器中的恒定浮点值 - 有什么理由使用制服?

java - 从 Resources 文件夹中获取文件夹 JAVA