2012-02-19 14 views
14

¿Por qué un personaje en Java ocupa el doble de espacio que un personaje en C?Tamaño de caracteres en Java vs. C

+4

Uno podría responder a la pregunta, ¿cómo es posible que sepa lo suficiente que son diferentes pero no van a el siguiente paso y averiguar por qué? –

+10

Java es dos veces más potente que C++, y la potencia debe provenir de algún lugar ... –

+0

@KerrekSB Pero puede tener 256x tantos caracteres. ;) –

Respuesta

26

En Java los caracteres son de 16 bits y C son de 8 bits.

Una pregunta más general es por qué es esto así?

para averiguar por qué es necesario mirar a la historia y llegar a conclusiones/opiniones sobre el tema.

Cuando C se desarrolló en los EE. UU., ASCII era bastante estándar allí y solo necesitabas realmente 7 bits, pero con 8 también podías manejar algunos caracteres que no eran ASCII. Puede parecer más que suficiente. Muchos protocolos basados ​​en texto como SMTP (correo electrónico), XML y FIX, solo usan caracteres ASCII. El correo electrónico y XML codifican caracteres no ASCII. Los archivos binarios, los sockets y la transmisión todavía son nativos de solo 8 bits.

Por cierto: C pueden apoyar a los personajes más amplios, pero eso no es normal char

Cuando Java fue desarrollado de 16 bits parecía suficiente para mantener a la mayoría de los idiomas. Desde entonces, Unicode se ha extendido a caracteres superiores a 65535 y Java ha tenido que agregar soporte para los puntos de código que son caracteres UTF-16 y pueden ser uno o dos caracteres de 16 bits.

Así que hacer un byte un byte y char un valor de 16 bits sin signo tenía sentido en ese momento.

BTW: Si su JVM es compatible con -XX:+UseCompressedStrings, puede utilizar bytes en lugar de caracteres para Cadenas que solo utilizan caracteres de 8 bits.

+0

Bueno, eso es más como :) :) –

+0

Ver más @

+4

Para ser precisos, en C son * al menos * 8 bits. –

0

Java char es un punto de código Unicode codificado en UTF-16, mientras que C utiliza codificación ascii en la mayoría de los casos.

+4

El estándar C no exige ASCII. –

+1

También el carácter de Java no es "un carácter unicode". –

+2

Derecha, es una unidad de código UTF-16. –

2

Dado que Java usa Unicode, C generalmente usa ASCII por defecto.

Existen varias formas de codificación Unicode, pero Java usa UTF-16, que utiliza una o dos unidades de código de 16 bits por carácter. ASCII siempre usa un byte por carácter.

+3

UTF-16 no "usa dos bytes por carácter". –

+0

Lo siento, "al menos" dos bytes por carácter. – DNA

1

Java es un lenguaje moderno por lo que soporta Unicode por omisión, al igual que muchos de los nuevos lenguajes de hoy (como C#). En contraste, C es un lenguaje "antiguo" de la era de los ASCII de 7 bits, por lo que usa caracteres de 8 bits por defecto.Al llegar a los tiempos Unicode, por no hacer los saltos de código antiguos deciden usar un tipo de carácter diferente que es wchar_t

Cuestiones relacionadas