Olá, Amigo! Eu gostaria de falar sobre a estrutura interna das variáveis. Como você já sabe, cada variável está associada a uma área da memória onde seu valor é armazenado. "
"Sim. Você me contou sobre isso da última vez."
"Ótimo. É bom que você se lembre. Vou continuar, então."
"Todos os tipos compostos consistem em outros mais simples. E eles, por sua vez, consistem em outros ainda mais simples. Até que, finalmente, acabamos com tipos primitivos , que não podem ser mais simplificados. É assim que eles são chamados - tipos primitivos . Pois Por exemplo, int é um tipo primitivo, mas String é um tipo composto que armazena seus dados como uma tabela de caracteres (onde cada caractere é um tipo primitivo char )."
"Muito interessante. Continue."
"Tipos compostos são formados pelo agrupamento de tipos simples. Chamamos esses tipos de classes . Quando definimos uma nova classe em um programa, declaramos um novo tipo de dados compostos . Seus dados serão outros tipos compostos ou tipos primitivos."
| código Java | Descrição |
|---|---|
|
Um novo tipo composto é declarado – Person. Seus dados são armazenados na Stringvariável (tipo composto) namee intvariável (tipo primitivo)age |
|
Um novo tipo composto é declarado – Rectangle. Consiste em quatro intvariáveis (tipo primitivo). |
|
Um novo tipo composto é declarado – Cat. Possui as seguintes variáveis: — owner, tipo composto Person— territory, tipo composto Rectangle— age, tipo primitivo int— name, tipo compostoString |
"Por enquanto, tudo está claro, por mais estranho que pareça."
"Grandes tipos (compostos) contêm muitos tipos pequenos (primitivos). É por isso que os objetos desses tipos ocupam muita memória - mais do que as variáveis dos tipos primitivos. Às vezes, muito mais. Executar operações de atribuição com essas variáveis costumava levar muito tempo tempo e exigia a cópia de grandes seções de memória. É por isso que variáveis de tipos compostos não armazenam o objeto em si, mas apenas uma referência a ele, ou seja, seu endereço de quatro bytes. Isso é suficiente para endereçar os dados em tais objetos. A máquina Java lida com todas as complexidades associadas."
"Eu não entendi nada disso."
"Dissemos anteriormente que uma variável é como uma caixa. Se você deseja armazenar o número 13 nela, pode escrever 13 em um pedaço de papel e colocá-lo na caixa."
“Mas imagine que você precise guardar algo maior na caixa (variável). do cachorro em vez do cachorro real, uma placa de carro em vez de um carro de verdade ou o número de telefone do seu vizinho em vez do seu vizinho."
“Pegamos um pedaço de papel e anotamos o telefone do vizinho. para o seu vizinho. Mas, como antes, você ainda tem apenas um vizinho. Isso faz sentido, não é?"
"Uma característica importante de armazenar dados dessa maneira é que você pode ter muitas referências a um único objeto "
"Que interessante! Quase consegui. Diga-me mais uma vez, por favor – o que aconteceria se eu atribuir uma variável de um tipo composto a outra variável do mesmo tipo composto?"
"Assim, as duas variáveis armazenariam o mesmo endereço. Isso significa que, se você alterar os dados do objeto referenciado por uma variável, alterará os dados referenciados pela outra . Ambas as variáveis referenciam o mesmo objeto . Claro, pode haver muitos outras variáveis que também armazenam referências a ela."
"O que as variáveis de tipos compostos (referência/classe) fazem se não estão mantendo uma referência a um objeto? Isso é possível?"
"Sim, amigo. Você está me adiantando com sua pergunta. Isso é possível. Se uma variável do tipo referência (composta) não está armazenando uma referência a um objeto, então ela armazena o que é conhecido como 'nulo referência'. Basicamente, isso significa que ele faz referência a um objeto cujo endereço é 0. No entanto, a máquina Java nunca cria objetos com esse endereço, então ela sempre sabe que se uma variável de referência contém 0, então ela não está apontando para nenhum objeto ."
| código Java | Descrição |
|---|---|
|
Declarações equivalentes. |
|
Criamos uma variável de pessoa cujo valor é nulo. Atribuímos a ele o endereço de um objeto Person recém-criado. Atribuímos null à variável. |
|
Criamos um objeto Cat e armazenamos seu endereço na variável cat; cat.owner é igual a nulo. Definimos cat.owner igual ao endereço de um objeto Person recém-criado. cat.owner.name ainda é igual a nulo. Definimos cat.owner.name igual a "Deus" |
"Eu entendi corretamente? Variáveis são divididas em dois tipos: tipos primitivos e tipos de referência. Tipos primitivos armazenam valores diretamente, enquanto tipos de referência armazenam uma referência a um objeto. Tipos primitivos incluem int, char, boolean e muitos outros. Referência os tipos incluem todo o resto. Usamos classes para criá-los."
"Você está absolutamente certo, meu garoto."
"Então, você diz que entendeu tudo. Aqui estão algumas tarefas para ajudá-lo a reforçar seu conhecimento."
GO TO FULL VERSION