¡Hola, amigo! Me gustaría hablarles sobre la estructura interna de las variables. Como ya sabes, cada variable está asociada a un área de memoria donde se almacena su valor. "
"Sí. Me hablaste de eso la última vez".
"Genial. Es bueno que lo recuerdes. Continuaré, entonces".
"Todos los tipos compuestos consisten en otros más simples. Y ellos, a su vez, consisten en otros aún más simples. Hasta que, por fin, terminamos con tipos primitivos , que no se pueden simplificar más. Así es como se llaman: tipos primitivos . Por ejemplo, int es un tipo primitivo, pero String es un tipo compuesto que almacena sus datos como una tabla de caracteres (donde cada carácter es un tipo primitivo char )".
"Muy interesante. Adelante".
"Los tipos compuestos se forman agrupando los simples. A estos tipos los llamamos clases . Cuando definimos una nueva clase en un programa, declaramos un nuevo tipo de datos compuestos . Sus datos serán otros tipos compuestos o tipos primitivos".
codigo Java | Descripción |
---|---|
|
Se declara un nuevo tipo compuesto: Person . Sus datos se almacenan en la String variable (tipo compuesto) name y int la variable (tipo primitivo)age |
|
Se declara un nuevo tipo compuesto: Rectangle . Consta de cuatro int variables (de tipo primitivo). |
|
Se declara un nuevo tipo compuesto: Cat . Tiene las siguientes variables: — owner , tipo compuesto Person — territory , tipo compuesto Rectangle — age , tipo primitivo int — name , tipo compuestoString |
"Por ahora, todo está claro, por extraño que parezca".
"Los tipos grandes (compuestos) contienen muchos tipos pequeños (primitivos). Es por eso que los objetos de estos tipos ocupan mucha memoria, más que las variables de los tipos primitivos. A veces mucho más. Realizar operaciones de asignación con tales variables solía llevar mucho tiempo". tiempo y requirió la copia de grandes secciones de memoria. Es por eso que las variables de tipos compuestos no almacenan el objeto en sí, sino solo una referencia a él, es decir, su dirección de cuatro bytes. Esto es suficiente para direccionar los datos en tales objetos. La máquina Java maneja todas las complejidades asociadas".
"No entendí nada de eso".
"Dijimos anteriormente que una variable es como una caja. Si quieres guardar el número 13 en ella, puedes escribir 13 en una hoja de papel y ponerlo en la caja".
"Pero imagina que necesitas guardar algo más grande en la caja (variable). Por ejemplo, un perro, un automóvil o tu vecino. En lugar de tratar de empujar lo que no se puede empujar dentro de la caja, podrías hacer algo más fácil: usar una foto del perro en lugar del perro real, una matrícula en lugar de un auto real, o el número de teléfono de su vecino en lugar de su vecino".
“Tomamos un papel y escribimos el número de teléfono del vecino. Esto es como una referencia a un objeto. Si copiamos el papel con el número de teléfono del vecino y lo ponemos en varias casillas, ahora hay más referencias. a tu vecino. Pero, como antes, todavía tienes un solo vecino. Eso tiene sentido, ¿no?
"Una característica importante de almacenar datos de esta manera es que puede tener muchas referencias a un solo objeto "
"¡Qué interesante! Ya casi lo tengo. Dígame una vez más, por favor, ¿qué pasaría si asigno una variable de un tipo compuesto a otra variable del mismo tipo compuesto?"
"Entonces, las dos variables almacenarían la misma dirección. Eso significa que si cambia los datos del objeto al que hace referencia una variable, cambia los datos a los que hace referencia la otra . Ambas variables hacen referencia al mismo objeto . Por supuesto, puede haber muchos otras variables que también almacenan referencias a él".
"¿Qué hacen las variables de tipos compuestos (referencia/clase) si no tienen una referencia a un objeto? ¿Es eso posible?"
"Sí, amigo. Te estás adelantando con tu pregunta. Eso es posible. Si una variable de tipo referencia (compuesto) no almacena una referencia a un objeto, entonces almacena lo que se conoce como 'null'". referencia". Básicamente, esto significa que hace referencia a un objeto cuya dirección es 0. Sin embargo, la máquina Java nunca crea objetos con esta dirección, por lo que siempre sabe que si una variable de referencia contiene 0, entonces no está apuntando a ningún objeto ."
codigo Java | Descripción |
---|---|
|
Declaraciones equivalentes. |
|
Creamos una variable de persona cuyo valor es nulo. Le asignamos la dirección de un objeto Person recién creado. Asignamos nulo a la variable. |
|
Creamos un objeto Cat y almacenamos su dirección en la variable cat; cat.propietario es igual a nulo. Establecemos cat.propietario igual a la dirección de un objeto Persona recién creado. cat.owner.name todavía es igual a nulo. Establecemos gato.propietario.nombre igual a "Dios" |
"¿Te entendí bien? Las variables se dividen en dos tipos: tipos primitivos y tipos de referencia. Los tipos primitivos almacenan valores directamente, mientras que los tipos de referencia almacenan una referencia a un objeto. Los tipos primitivos incluyen int, char, boolean y muchos otros. Referencia los tipos incluyen todo lo demás. Usamos clases para crearlos".
"Tienes toda la razón, hijo mío".
"Entonces, dices que has entendido todo. Aquí hay algunas tareas para ayudarte a reforzar tu conocimiento".
GO TO FULL VERSION