¿Por qué un personaje en Java ocupa el doble de espacio que un personaje en C?Tamaño de caracteres en Java vs. C
Respuesta
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.
Bueno, eso es más como :) :) –
Ver más @
Para ser precisos, en C son * al menos * 8 bits. –
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.
El estándar C no exige ASCII. –
También el carácter de Java no es "un carácter unicode". –
Derecha, es una unidad de código UTF-16. –
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.
UTF-16 no "usa dos bytes por carácter". –
Lo siento, "al menos" dos bytes por carácter. – DNA
La plataforma Java 2 utiliza la representación UTF-16 en arrays de char y en las clases String y StringBuffer.
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
- 1. tamaño del tipo de caracteres en C#
- 2. C++ vs Java en Android
- 3. C# vs Java generics
- 4. Java: tamaño de byte de cadena de caracteres Char versus.
- 5. C# vs Java - Listas genéricas
- 6. C# sellado vs Java final
- 7. Serialización en Java vs JSON vs XML
- 8. Eliminar caracteres específicos de la cadena en Java
- 9. cómo escapar "\" caracteres en Java
- 10. Int32 Int64 vs vs Int en C#
- 11. Cómo obtener los últimos caracteres en una cadena en Java, independientemente del tamaño de cadena
- 12. C# Response.WriteFile vs Response.TransmitFile tamaño del archivo emite
- 13. C# llamando a la función C que devuelve struct con arreglo de caracteres de tamaño fijo
- 14. cuente caracteres específicos en una cadena (Java)
- 15. Caracteres invisibles en Java Strings
- 16. C/C++ caja de conmutadores en matrices de caracteres
- 17. Tamaño de pila retenido de una cadena en java
- 18. Cadenas y codificación de caracteres en C++
- 19. Inicialización matriz de tamaño variable en Java
- 20. JNI Llamadas diferentes en C vs C++?
- 21. Cómo leer caracteres ilimitados en C
- 22. SAX vs XmlTextReader - SAX en C#
- 23. matriz de caracteres vs puntero char
- 24. Iteradores en C++ (stl) vs Java, ¿hay alguna diferencia conceptual?
- 25. Límite de caracteres para System.out.println() en Java
- 26. escapando caracteres de formato en java String.format
- 27. Codificación de caracteres UTF-8 en Java
- 28. Reemplazar secuencia de caracteres en java
- 29. Filtrado de caracteres XML ilegales en Java
- 30. Cómo intercambiar caracteres de cadena en Java?
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é? –
Java es dos veces más potente que C++, y la potencia debe provenir de algún lugar ... –
@KerrekSB Pero puede tener 256x tantos caracteres. ;) –