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.