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

空字符串对象和字符串文字的串联

司寇经亘
2023-03-14
问题内容

这是以前有关Java中的String初始化的一些问题的后续问题。

在用Java进行了一些小测试之后,我面临以下问题:

为什么我可以执行此语句

String concatenated = str2 + " a_literal_string";

当str2一个String对象初始化为null(String str2 = null;),但我不能调用方法toString()上str2?那么Java如何将空字符串对象和字符串文字串联起来?

顺便说一句,我还尝试将一个初始化为null和字符串文字的Integer连接起来,”a_literal_string”并且我”null a_literal_string”在控制台中得到了同样的东西。那么,哪一种null都会带来相同的效果?
PS:System.out.println(concatenated);给空a_literal_string作为控制台输出。


问题答案:

这行:

String concatenated = str2 + " a_literal_string";

编译成类似

String concatenated = new StringBuilder().append(str2)
                                         .append(" a_literal_string")
                                         .toString();

这给出"null a_literal_string"(而不是给出NullPointerException),因为StringBuilder.append是使用实现的String.valueOf,并String.valueOf(null)返回string "null"

我还尝试将一个初始化为null的Integer和字符串文字“ a_literal_string”连接起来,我得到了同样的东西

这是由于与上述相同的原因。String.valueOf(anyObject)这里anyObject是null会给予回复”null”。



 类似资料:
  • 问题内容: 字符串文字和字符串对象的添加有什么区别? 例如 为什么/ 不指向与相同的位置? 问题答案: 因为不是 常量表达式 ,由于和不是,因此其结果不会被插入,即创建另一个对象来表示它,因此引用比较产生。 JLS 3.10.5字符串文字 : 使用String.intern方法,对字符串常量(或更常见的是常量表达式的值(第15.28节)的字符串)进行“ interned”,以便共享唯一的实例。 J

  • 问题内容: 之间有什么区别 和 问题答案: 当你使用字符串文字时,可以将字符串嵌入,但是当你使用时,你将获得一个新的字符串对象。 在此示例中,两个字符串文字均引用相同的对象: 在这里,创建了2个不同的对象,它们具有不同的引用: 通常,应尽可能使用字符串文字表示法。它更易于阅读,并且为编译器提供了优化代码的机会。

  • 问题内容: 我正在从事Java代码优化。我不清楚或符号之间的区别: 第2行和第3行有什么区别? 问题答案: 这种方法使用StringBuilder创建结果字符串 此方法仅调用的静态方法来获取int的String版本 依次调用

  • 问题内容: 以下语句, 产生输出。 但是,以下内容 产生。 区别在哪里? 问题答案: 您会因为操作符优先级和字符串转换的结合而看到此行为。 JLS 15.18.1 指出: 如果只有一个操作数表达式的类型为String,则对另一操作数执行字符串转换(第5.1.11节),以在运行时生成字符串。 因此,第一个表达式中的右侧操作数将隐式转换为字符串: 但是对于第二个表达式,必须将复合赋值运算符与一起考虑。

  • 问题内容: 空字符串()和空字符串()有什么区别? 这就是我所拥有的: 这是什么意思? 问题答案: 表示将空值分配给。在这种情况下,与相同,将按预期产生。 表示将()或“完全没有值”分配给。因此,这与相同,它将产生一个,因为您无法在Java中对变量(指针或类似物)调用方法。 还有一点,声明 实际上具有与以下功能相同的效果: 鉴于 如前所述,是另一回事。

  • 问题内容: 这是该问题的后续措施。 问题在下面的第二行。 问题答案: 具体根据 源,其使用,