Java中'.'和'。'的区别

8

用''和""连接字符串有什么区别吗?

例如,以下两种方式有何不同:

String s = "hello" + "/" + "world";

并且

String s = "hello" + '/' + "world";
11个回答

27
双引号包含的字面值,如"foo",是字符串,而单引号包含的字面值,如'c',是字符。在拼接行为方面,它们没有明显的区别。
然而,需要记住的是,在某些情况下,字符串和字符不能互换,并且不能由多个字符组成单引号字符串。

严格来说, '\n' 是 char 类型的一个可接受值(尽管从严格意义上说,这只是一个字符,即使表示为两个字符)。 - Henrik Paul
nod - 我主要是想指出,在许多其他语言中,这两种引号并不可以互换。 - Rob

13
System.out.println('a'+'b'+'c');
> 294
System.out.println("a"+"b"+"c");
> abc

这里发生的是(char)+(char)=(int)的操作。

换句话说,使用""将文本括起来可以避免出现意料之外的结果。


10

"." 是一个字符串,'.' 是一个字符。


4
你可以查看JDK :-)
给定两个函数:
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


3
"

"."是只包含一个字符的字符串。'.'是一个字符。

一旦将它们连接在一起,它们之间没有任何区别。

"

实际上有一点差别,追加字符比单个字符字符串稍微快一点。不过差异非常小,以至于并不重要。 - Esko
没错。但你可以说,告诉一个新手这种小问题可能会让他们走上错误的道路。 :-) - Darron

3

''用于字符字面量。

因此,您不能这样做:

"Osc" + 'ar' + "Reyes"

因为ar不是字符字面量。

在您的示例中,这并没有太大的区别,因为

'/' 

是一个字符字面量,而

 "/" 

是一个仅包含一个字符的字符串文字。

此外,您可以使用以下语法来使用任何UTF字符

'\u3c00'

所以你也可以使用:

"Osc" + '\u3c00' + "ar 

你必须记住的一件事是,在编译之前,Unicode 会被转换为字符。因此,'\u005c' 将被转换为 '',这将导致编译错误。 - Peter B. Bock
@Peter:哦哦!!我不知道这个。感谢您的评论:class Un { String s = "Osc" + '\u005c' + "ar"; } - OscarRyz

2

添加一个字符比添加一个字符的字符串快大约25%。 通常这并不重要,例如

String s = "hello" + "/" + "world";

编译器会将此转换为一个字符串,因此无论如何都不会在运行时进行任何字符串连接/追加。


1
从理论上讲,将字符添加到字符串中更快-Java 6似乎在底层创建StringBuffer,并且我记得在Java性能网站上阅读过连接字符会稍微更快的内容。

1

0

char theLetterA = 'A'; string myString = "a string";

字符 theLetterA = 'A'; 字符串 myString = "a string";


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