2010-10-18 8 views
26

C'è qualche ragione per cui il tipo di dati primitivi di Java char è 2 byte a differenza di C che è 1 byte?Perché la primitiva del char Java occupa 2 byte di memoria?

Grazie

+4

La risposta breve è perché hanno ingannato: avrebbero dovuto usare caratteri a 32 bit. – tchrist

+0

No, non avrebbero dovuto usare caratteri larghi a 32 bit. Ciò renderebbe ancora più grave! – vy32

+6

@ vy32: Sì. Dovrebbero davvero aver usato [caratteri a 6 bit di larghezza] (https://en.wikipedia.org/wiki/Six-bit_character_code). Ciò farebbe risparmiare spazio e, dopo tutto, le maiuscole dovrebbero essere sufficienti per tutti. –

risposta

18

char in Java è UTF-16 codificato, che richiede un minimo di 16 bit di archiviazione per ciascun carattere.

44

Quando Java è stato originariamente progettato, è stato previsto che qualsiasi carattere Unicode si sarebbe adattato in 2 byte (16 bit), quindi char e Character sono stati progettati di conseguenza. Infatti, un personaggio Unicode può ora richiedere fino a 4 byte. Pertanto, UTF-16, la codifica Java interna, richiede caratteri supplementari che utilizzano 2 unità di codice. I caratteri nel piano multilingue multilingue (quelli più comuni) continuano a essere utilizzati 1. Un Java char viene utilizzato per ciascuna unità di codice. Questo Sun article lo spiega bene.

+5

Sono sicuro che Joel apprezzerà la presa per "ciò che ogni programmatore dovrebbe sapere sulla codifica dei caratteri: http://joelonsoftware.com/articles/Unicode.html – fooMonster

9

In Java, un carattere è codificato in UTF-16 che utilizza 2 byte, mentre una normale stringa C è più o meno solo un gruppo di byte. Quando è stato progettato C, utilizzando ASCII (che copre solo il set di caratteri della lingua inglese) è stato ritenuto sufficiente, mentre i progettisti Java hanno già considerato l'internazionalizzazione. Se si desidera utilizzare Unicode con stringhe C, la codifica UTF-8 è il metodo preferito in quanto ha ASCII come sottoinsieme e non utilizza il byte 0 (diversamente da UTF-16), che viene utilizzato come indicatore di fine stringa in C. Un tale indicatore di fine stringa non è necessario in Java poiché una stringa è un tipo complesso qui, con una lunghezza esplicita.

-1

Java utilizzato come internazionalizzazione quindi, il suo lavoro in lingue diverse e ha bisogno di spazio più di un byte, è per questo che prende 2 byte di spazio in char. per es. La lingua cinese non può contenere un byte di carattere.

3

In lingue precedenti come C vengono utilizzate le notazioni ASCII. E l'intervallo è 127, per 127 simboli univoci e caratteri lingua.

Mentre JAVA è dotato di una funzione chiamata "internazionalizzazione", vale a dire tutti i leggibile caratteri (inclusi simboli regionali) sono anche aggiunto in esso, e la gamma Cresce anche, in modo più la memoria richiesto, il sistema per unificare tutti questi simboli è "Sistema Unicode standard", e in modo che questo Unificazione richieda quel byte aggiuntivo in JAVA.

Il primo byte rimane così com'è e i caratteri ASCII sono impostati su 127 come in C, C++ ma i caratteri unificati vengono aggiunti ad essi.

Così 16-bit per carattere in Java e 8-bit per carattere in C.

-2

come sappiamo c suppors ASCII dove, come Java supporta Unicode che contiene le 3 cose che è 1-ASCII 2-esteso ASCII Carattere con 3 lingue locali ASCII è un sottoinsieme di unicode.ASCII supporta solo la lingua inglese dove Unicode supporta le lingue multinazionali.altrimenti il ​​carattere java è codificato in UTF-16 che utilizza 2 byte.for tutte le ragioni e come Unicode è la versione estesa di ASCII, quindi usa 16 bit di 8 bit.

0

Esercitazioni Java ™: Il tipo di dati char è un singolo carattere Unicode a 16 bit. Ha un valore minimo di '\ u0000' (o 0) e un valore massimo di '\ uffff' (o 65.535 inclusi).

Problemi correlati