【问题标题】:How does Java concatenate 2 strings?Java如何连接2个字符串?
【发布时间】:2014-02-10 05:04:16
【问题描述】:

为什么下面打印的是 197,而不是 'bc'?

System.out.println('b' + 'c');

有人可以解释如何在 Java 上进行正确的连接吗?

附:我学了一些 Python,现在正在转型学习 Java。

【问题讨论】:

  • 对于那些不是字符串的初学者来说。字符串文字使用双引号。
  • 197bc 的unicode 值之和,Python 与Java 中的Java 不同'b''c' 是字符串在Java 中它们是字符文字,字符串文字必须双引号 " "

标签: java string concatenation


【解决方案1】:

'b''c' 不是Strings,它们是chars。您应该使用双引号 "..." 代替:

System.out.println("b" + "c");

你得到一个int,因为你正在添加这些字符的unicode values

System.out.println((int) 'b'); // 98
System.out.println((int) 'c'); // 99
System.out.println('b' + 'c'); // 98 + 99 = 197

【讨论】:

  • Java 语言规范将chars 定义为编码 Unicode 代码点的 UTF-16 代码单元,而不是 ASCII 值。
【解决方案2】:

'b' 不是String 中的Java 它是char。然后'b'+'c' 打印197

但是如果你使用"b"+"c",这将打印bc,因为""曾经代表String

System.out.println("b" + "c"); // prints bc

【讨论】:

    【解决方案3】:

    使用+ 连接字符会将字符的值更改为ascii,从而给出数字输出。如果您想将bc 作为输出,则需要将bc 作为字符串。目前,您的 bc 在 Java 中是 char。

    在Java中,字符串字面量应该被""包围,字符被''包围

    【讨论】:

      【解决方案4】:

      是的,单引号是Char,而双引号代表字符串,所以:

      System.out.println("b" + "c");
      

      一些替代方案可以是:

      "" + char1 + char2 + char3;
      

      或:

      new StringBuilder().append('b').append('c').toString();
      

      【讨论】:

      • .append("") 是多余的。
      【解决方案5】:

      'b' 和 'c' 不是字符串,它们是字符。 197是b和c的unicode值之和

      对于连接字符串,您可以使用以下两种方式:

      • System.out.println("b"+"c");
      • System.out.println("b".concat("c"));

      【讨论】:

        【解决方案6】:

        在 Java 中,字符串字面量用双引号表示 - ""

        您所做的是将两个char 值加在一起。你想要的是:

        System.out.println("b" + "c"); // bc
        

        您的代码发生的事情是它添加了charsASCII 值以得出197

        'b' 的 ASCII 值为98'c' 的 ASCII 值为99

        结果是这样的:

        System.out.println('b' + 'c'); // 98 + 99 = 197
        

        作为我对chars 的ASCII 值的引用:

        char 数据类型是单个 16 位 Unicode 字符。

        来自Docs。但是,据我所知,对于一个字节 (0-255),chars 可以 由它们的 ASCII 值表示,因为 ASCII 值直接对应于 Unicode 代码点值 - see here

        我在上面的回答中引用 ASCII 值的原因是因为 256 个 ASCII 值涵盖了所有字母(大写和小写)和标点符号 - 所以它涵盖了所有主要内容。

        从技术上讲,我所说的是正确的——它确实添加了 ASCII 值(因为它们与 Unicode 值相同)。但是,从技术上讲,它添加了 Unicode 代码点十进制值。

        【讨论】:

        • @Christian 我知道字符是用 unicode 字符表示的。但是,ASCII 值很好地对应于解释。
        • @mikeaworski Unicode 索引对应得更好,因为它们实际上在这里使用。
        • @Pshemo 我很难找到 Unicode 索引如何将'b' 表示为98。我只是说这样的问题更容易将人们指向 ASCII 方向,因为 ASCII 值(我认为是一个字节)是相同的。
        • @mikeaworski 然后在你的答案中注明。您了解技术细节,但人们可能不了解。
        猜你喜欢
        • 1970-01-01
        • 2011-02-07
        • 2018-03-13
        • 2019-03-16
        • 2011-01-28
        • 2011-04-14
        • 1970-01-01
        相关资源
        最近更新 更多