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
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
char
in Java è UTF-16 codificato, che richiede un minimo di 16 bit di archiviazione per ciascun carattere.
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.
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
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.
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.
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.
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.
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).
La risposta breve è perché hanno ingannato: avrebbero dovuto usare caratteri a 32 bit. – tchrist
No, non avrebbero dovuto usare caratteri larghi a 32 bit. Ciò renderebbe ancora più grave! – vy32
@ 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. –