用''和""连接字符串有什么区别吗?
例如,以下两种方式有何不同:
String s = "hello" + "/" + "world";
并且
String s = "hello" + '/' + "world";
用''和""连接字符串有什么区别吗?
例如,以下两种方式有何不同:
String s = "hello" + "/" + "world";
并且
String s = "hello" + '/' + "world";
"foo"
,是字符串,而单引号包含的字面值,如'c'
,是字符。在拼接行为方面,它们没有明显的区别。System.out.println('a'+'b'+'c');
> 294
System.out.println("a"+"b"+"c");
> abc
这里发生的是(char)+(char)=(int)的操作。
换句话说,使用""将文本括起来可以避免出现意料之外的结果。
"."
是一个字符串,'.'
是一个字符。
public static String concatString(String cs) {
return "hello" + cs + "world";
}
public static String concatChar(char cc) {
return "hello" + cc + "world";
}
在对字节码进行检查后,可以归结为两种方法: AbstractStringBuilder.append(String) 和 AbstractStringBuilder.append(char)。
这两种方法都调用了AbstractStringBuilder.expandCapacity(int)),该方法将最终分配一个新的char[]并首先System.arraycopy旧内容。
之后,AbstractStringBuilder.append(char)只需要将给定的字符放入数组中,而AbstractStringBuilder.append(String)则必须检查一些约束条件并调用String.getChars(int, int, char[], int),它会对附加的字符串进行另一个System.arraycopy。
"."是只包含一个字符的字符串。'.'是一个字符。
一旦将它们连接在一起,它们之间没有任何区别。
"''用于字符字面量。
因此,您不能这样做:
"Osc" + 'ar' + "Reyes"
因为ar不是字符字面量。
在您的示例中,这并没有太大的区别,因为
'/'
是一个字符字面量,而
"/"
是一个仅包含一个字符的字符串文字。
此外,您可以使用以下语法来使用任何UTF字符
'\u3c00'
所以你也可以使用:
"Osc" + '\u3c00' + "ar
添加一个字符比添加一个字符的字符串快大约25%。 通常这并不重要,例如
String s = "hello" + "/" + "world";
编译器会将此转换为一个字符串,因此无论如何都不会在运行时进行任何字符串连接/追加。
char theLetterA = 'A'; string myString = "a string";
字符 theLetterA = 'A'; 字符串 myString = "a string";