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?

pupeno
źródło

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).

Yuval Adam
źródło
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 = '"';
VonC
źródło
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.

Eddy Bayonne
źródło
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)

Koń_1995
źródło