为什么这个java语句正在生成此输出?

时间:2014-02-08 21:48:58

标签: java concatenation

我有一个字符串str,让我们说它的值是“地狱”。

以下语句返回“205hellhe”而不是“hehellhe”

return (str.charAt(0)) + (str.charAt(1))+str+(str.charAt(0)) + (str.charAt(1));

为什么(str.charAt(0))+(str.charAt(1))返回205而不是“he”以及为什么同一个语句最后返回“he”?

2 个答案:

答案 0 :(得分:0)

发生这种情况是因为正在添加字符的ASCII代码的值而不是连接。在ASCII中, h 表示为104, e 表示为101.连接不起作用,可能是因为在这种情况下两个操作数都是字符/整数。

答案 1 :(得分:0)

  • 表达式从左到右评估。
  • 因此,评估并添加前两个字符,这会产生一个字符(值= 205)。
  • 接下来将此char(= 205)添加到字符串中,从而生成String。

因此奇怪的输出。

修复:

使用StringBuilder代替

public static void main(String[] args) {

    String str = "hell";
    StringBuilder buff = new StringBuilder();
    buff.append(str.charAt(0))
            .append(str.charAt(1))
            .append(str)
            .append(str.charAt(0))
            .append(str.charAt(1));
    System.out.println(buff.toString());// prints 'hehellhe'
}