当前位置: 首页 > 面试题库 >

java中字符串常量的串联

陈瀚
2023-03-14
问题内容

在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"


 类似资料:
  • 在C语言中,创建我所知道的多行字符串的最佳规范方法是创建相邻的字符串,并让编译器在编译时将它们连接起来,如下所示: 在Java中,我知道的唯一方法是使用连接: 问题是,这是在运行时生成单个字符串,还是java在编译时也会连接?这个问题出现的原因是因为以下行为:

  • 当使用关键字 new 创建字符串时,它使用采用 String 文本的构造函数创建新的 String 对象。我想知道在调用 String 构造函数之前,文本是否存储在常量池中。 我这么问的原因是,在《OCA Java SE 7程序员I认证指南》中,Mala Gupta写道: 她在第一行表示,new创建的String对象不会存储在常量池中。这很好,但不清楚的是,第一行构造函数中的字面“Summer”是

  • 本文向大家介绍Java 中的字符串常量池详解,包括了Java 中的字符串常量池详解的使用技巧和注意事项,需要的朋友参考一下 Java中的字符串常量池 Java中字符串对象创建有两种形式,一种为字面量形式,如String str = "droid";,另一种就是使用new这种标准的构造对象的方法,如String str = new String("droid");,这两种方式我们在代码编写时都经常使

  • 如这些问题中所述:问题1 在以下情况下,JVM将创建一个新的字符串对象,而不是使用字符串池中的现有对象: 然而,在阅读了下面两个类似的陈述之后,我有一个疑问。 从SCJP准备书: 当编译器遇到字符串文字时,它会检查池中是否已经存在相同的字符串。如果找到匹配项,对新文本的引用将指向现有的String,并且不会创建新的String文本对象。 来自JavaRanch: 在本例中,由于关键字“new”,我

  • 问题内容: 这与Java字符串常量池有关。在我的一个程序中,我正在解密数据库的密码并将其存储在字符串中。我听说Java字符串将存储在Constant池中,并且不会被VM重新启动或加载了String Quits的ClassLoader破坏。 如果是这种情况,我的密码将存储在字符串池中。我非常关心这个问题。还有其他方法可以销毁这些文字或我可以做的其他任何事情。 请对此提出建议, 问候,阳光明媚。 问题

  • 本文向大家介绍Java中的字符串常量池是什么?,包括了Java中的字符串常量池是什么?的使用技巧和注意事项,需要的朋友参考一下 当您将字符串存储为 JVM会直接在一个单独的内存块(称为String常量池)中创建具有给定值的String对象。 每当我们尝试创建另一个String作为 JVM会验证String常量池中是否存在具有相同值的String对象,如果不是,JVM会创建新对象而不是创建新对象,而