“a string with a char: ” + 'c' 比 “a string with a char: ” + "c" 更好还是更差?

3

一个小问题,但我真的很好奇。

使用

"a string with a char: " + 'x'

"a string with a char: " + "x"

有什么本质上的优劣之分吗?它们都可以工作,但我想知道是否有任何性能或效率方面的影响--即使它们很小。

谢谢。


由于Java将在后台使用“StringBuilder”来连接它们,因此不会有任何性能影响。 - Luiggi Mendoza
你的意思是代码字面上是这样写的(追加两个字面量),还是你有一些值作为变量?编译器可能会使前者相同,但后者可能会不同。 - Tim S.
如果@LuiggiMendoza使用的是JDK 5.0之前的版本,那么他可能会使用StringBuffer。 - jantristanmilan
1
这可能会帮助您更好地理解该概念。 - Nishant
1
虽然在 https://dev59.com/G3fZa4cB1Zd3GeqPNRdd#18925251 中描述了没有性能问题,但使用 'x' 仍有好处;如果您只想输入一个字符,编译器会友好地提示您打错了。 - k1eran
显示剩余2条评论
2个回答

2
public void test(){ 
    String str1 = "appl" + 'e';
    String str2 = "banan" + "a";
}

字节码没有变化:

public void test();
    Code:
       0: ldc           #2                  // String apple
       2: astore_1      
       3: ldc           #3                  // String banana
       5: astore_2      
       6: return

我需要提醒一下的是,如果您将字符串拼接放在循环内部,那么StringBuilder 将会被用于两个字符串的拼接。就这些。


0

我非常确定它们都会生成相同高效的字节码。编译器很聪明。

所以,如果有差异(我不确定),编译器会将其消除。


我已经阅读过,在编译期间发生串联,因此至少在 OP 的特定示例中,它将在两种情况下都转换为 "a string with a char: x" - Radiodef
这就是我所说的,因为这可以轻松地转换成最佳形式,所以它将是最好的。 - LionC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接