1) Las cadenas son objetos, que normalmente contienen una matriz char
y la longitud de las cadenas. La matriz de caracteres generalmente se implementa como una matriz contigua de palabras de 16 bits, cada una con un carácter Unicode en orden de bytes nativo.
2) Asignar un valor de carácter a un entero convierte el código de carácter Unicode de 16 bits en su equivalente entero. Por lo tanto, 'c'
, que es U + 0063, se convierte en 0x0063
, o 99.
3) Como cada String
es un objeto, contiene otra información que los miembros de su clase (por ejemplo, palabra de descripción de clase, palabra de bloqueo/semáforo, etc.).
Adendum
El objeto contenidos dependen de la implementación JVM (que determina la sobrecarga inherente asociado con cada objeto), y cómo la clase es en realidad codificada (es decir, algunas bibliotecas pueden ser más eficientes que otros).
Ejemplo
Una implementación típica asignará una sobrecarga de dos palabras por instancia de objeto (para el descriptor de la clase/puntero, y una palabra de control de semáforos/bloqueo); un objeto String
también contiene una longitud de int
y una referencia de matriz char[]
. El contenido de los caracteres reales de la cadena se almacena en un segundo objeto, la matriz char[]
, que a su vez tiene asignadas dos palabras, más una longitud de matriz, más tantos elementos de char
de 16 bits como sea necesario para la cadena (más cualquier carácter adicional que quedaron colgando cuando se creó la cuerda).
adición 2
El caso que uno carbón representa el carácter de uno Unicode sólo es cierto en la mayoría de los casos. Esto implicaría la codificación UCS-2 y verdadera antes de 2005. Pero ahora Unicode se ha hecho más grande y las cadenas deben codificarse usando UTF-16, donde un único carácter Unicode puede usar doschar
s en Java String
.
Eche un vistazo al código fuente real para la implementación de Apache, p. at:
http://www.docjar.com/html/api/java/lang/String.java.html
Debería considerar dividirlas en preguntas individuales, ya que son realmente muy diferentes. # 2 probablemente pueda ser respondida aquí: http://stackoverflow.com/questions/1490218/utf-16-to-ascii-conversion-in-java –