Java如何拼接2个字符串?

3
为什么以下代码输出的是197而不是'bc'呢?
System.out.println('b' + 'c');

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

附言:我学过一些Python,现在正在转学Java。


5
首先,那些不是字符串。字符串字面值使用双引号。 - PakkuDon
1
197bc 的 Unicode 值之和。在 Python 中,'b''c' 是字符串,而在 Java 中它们是字符字面量。字符串字面量必须用双引号 " " 包含。Python 和 Java 在这方面有所不同。 - Grijesh Chauhan
6个回答

6
''b''c'不是String类型的,它们是char类型的。你应该使用双引号"..."代替单引号:'...'。'
System.out.println("b" + "c");

您得到了一个int因为您正在将那些字符的Unicode值相加:

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

3
Java 语言规范将 char 定义为 UTF-16 编码 Unicode 代码点的代码单元,而不是 ASCII 值。 - Mike Samuel

1
"'b' 不是 Java 中的 String,而是 char。因此,'b'+'c' 输出 197

但是,如果您使用 "b"+"c" 将输出 bc,因为 "" 用于表示 String

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

1
使用+连接字符会将char的值更改为ascii,从而产生数字输出。如果您想要输出bc,则需要将bc作为字符串。目前,在Java中您的bc是char类型。
在Java中,字符串文字应该用""括起来,而字符则用''括起来。

1

在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字符。

来自文档。然而,对于一个字节(0-255),据我所知,chars也可以用它们的ASCII值表示,因为ASCII值直接对应于Unicode代码点值 - 在这里查看
我之前在回答中提到ASCII值的原因是因为256个ASCII值涵盖了所有字母(大写和小写)和标点符号 - 因此它涵盖了所有主要内容。
从技术上讲,我说的是正确的 - 它确实添加了ASCII值(因为它们与Unicode值相同)。但从技术上讲,它添加了Unicode代码点十进制值。

1
Unicode,而非ASCII - Christian Tapia
3
@mikeyaworski:Unicode索引更好,因为它们实际上在这里使用。 - Pshemo
@mikeyaworski https://dev59.com/8mkv5IYBdhLWcg3wwjkI@mikeyaworski https://dev59.com/8mkv5IYBdhLWcg3wwjkI和ASCII字符是否相同 - Christian Tapia
@Christian:这就是我说的。ASCII值并不能覆盖所有内容,但它们涵盖了主要的东西(标点符号和字母),并直接对应于Unicode代码点值(因此引用ASCII值来表示字母没有任何问题)。在互联网上找到一个没有杂乱无章的ASCII表格似乎更容易一些,我知道其中的技术细节。 - Michael Yaworski
1
@mikeyaworski 然后在您的答案中说明。您了解技术细节,但人们可能不清楚。 - Christian Tapia
显示剩余4条评论

1
'b''c'不是字符串,它们是字符。 197是bc的Unicode值之和。
要连接字符串,您可以使用以下两种方法:
  • System.out.println("b"+"c");
  • System.out.println("b".concat("c"));

1

是的,单引号代表字符,双引号代表字符串,因此:

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

一些替代方案可以是:

"" + char1 + char2 + char3;

或者:

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

".append("")" 是多余的。 - Pshemo

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