Czy istnieje różnica między pojedynczymi i podwójnymi cudzysłowami w Javie?


101

Czy istnieje różnica między pojedynczymi i podwójnymi cudzysłowami w Javie?

Odpowiedzi:


147

Użyj apostrofów dla literału chars, cudzysłowu podwójnego dla literału Strings, na przykład:

char c = 'a';
String s = "hello";

Nie można ich używać w żaden inny sposób (jak na przykład w Pythonie).


10
I oczywiście to zachowanie jest zapożyczone z C (które prawdopodobnie dostało je gdzie indziej, jak przypuszczam).
JesperE

Dla mnie apostrofy dosłowne automatycznie przerzucane do inttakich kontekstów. Więc nie musi tak być char. Zasługuje na kilka negatywnych opinii ... uproszczone.
Hydroper

36

Znak to pojedynczy znak UTF-16, czyli litera, cyfra, znak interpunkcyjny, tabulator, spacja lub coś podobnego.

Literał char to pojedynczy znak ujęty w pojedyncze cudzysłowy, takie jak ten

char myCharacter = 'g'; 

lub sekwencja ucieczki, a nawet sekwencja ucieczki Unicode:

char a = '\t';    // Escape sequence: tab
char b = '\177'   // Escape sequence, octal.
char c = '\u03a9' // Unicode escape sequence. 

Warto zauważyć, że sekwencje unikowe Unicode są przetwarzane bardzo wcześnie podczas kompilacji, a zatem użycie „\ u00A” doprowadzi do błędu kompilatora. W przypadku symboli specjalnych lepiej jest zamiast tego używać sekwencji ucieczki, tj. „\ N” zamiast „\ u00A”.

Ponieważ podwójne cudzysłowy są for String, musisz użyć „sekwencji ucieczki podwójnego cudzysłowu” ( \") wewnątrz łańcuchów, gdzie w przeciwnym razie zakończyłby ciąg.
Na przykład:

System.out.println("And then Jim said, \"Who's at the door?\"");

Nie ma potrzeby ucieczki przed podwójnym cudzysłowem w apostrofach.
Poniższy wiersz jest legalny w Javie:

char doublequote = '"';

12

Rozważmy następujące wiersze kodów (Java):

System.out.println("H"+"A"); //HA
System.out.println('H'+'a'); //169

1) Pierwszy kierunek jest połączeniem Hi Aktóra spowoduje HA(ciągiem znaków)

2) Po drugie dodajemy wartości dwóch znaków, które zgodnie z tabelą ASCII H= 72 i a= 97, co oznacza, że ​​dodajemy, 72+97że jest jak ('H'+'a').

3) Rozważmy inny przypadek, w którym mielibyśmy:

System.out.println("A"+'N');//AN

W tym przypadku mamy do czynienia z konkatenacją String Ai char, Nco da w wyniku AN.


4

Pojedynczy cudzysłów oznacza znak, a podwójny cudzysłów oznacza ciąg.

char c = 'c';

„c” -----> c jest znakiem

String s = "stackoverflow";

"stackoverflow" ------> stackoverflow to ciąg znaków (tj. kolekcja, jeśli znaki)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.