Разница между '.' а также "." в Яве - PullRequest
6 голосов
/ 30 января 2009

Есть ли разница между объединением строк с '' и ""?

Например, в чем разница между:

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

и

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

Заранее спасибо.

Ответы [ 10 ]

24 голосов
/ 30 января 2009

Литералы заключены в двойные кавычки, например, "foo", являются строками , тогда как литералы в одинарных кавычках, например, 'c', символов . С точки зрения поведения сцепления не будет заметной разницы.

Тем не менее, стоит помнить, что строки и символы не являются взаимозаменяемыми во всех сценариях, и вы не можете иметь строку в одинарных кавычках, состоящую из нескольких символов.

12 голосов
/ 31 января 2009
System.out.println('a'+'b'+'c');
> 294
System.out.println("a"+"b"+"c");
> abc

Что здесь происходит, так это (char) + (char) = (int) Другими словами. Используйте «» для текста, чтобы избежать неожиданностей.

9 голосов
/ 30 января 2009

"" Строка, '.' это символ.

4 голосов
/ 31 января 2009

Вы можете просто заглянуть в 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 голосов
/ 30 января 2009

'' для литералов символов.

Так что вы не можете сделать это:

"Osc" + 'ar' + "Reyes"

Потому что ar не символьный литерал.

В вашем примере это не имеет большого значения, потому что

'/' 

является буквенным символом, а

 "/" 

- это строковый литерал, содержащий только один символ.

Кроме того, вы можете использовать любой символ UTF со следующим синтаксисом

'\u3c00'

Так что вы также можете использовать:

"Osc" + '\u3c00' + "ar 
3 голосов
/ 30 января 2009

"" строка, состоящая только из одного символа '' это персонаж.

Как только вы объединяете их вместе, нет никакой разницы.

2 голосов
/ 30 января 2009

Добавление символа примерно на 25% быстрее, чем добавление строки из одного символа. Часто это не имеет значения, например,

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

Он преобразуется компилятором в одну строку, поэтому в любом случае во время выполнения не будет происходить конкатенации / добавления строк.

1 голос
/ 31 января 2009
1 голос
/ 30 января 2009

Теоретически быстрее добавить символ в строку - Java 6, кажется, создает StringBuffers под одеялом, и я помню, как читал на сайте Java Performance, что объединение символов будет незначительно быстрее.

0 голосов

char theLetterA = 'A'; string myString = "строка";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...