Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Tipos da array e tamanho

Fiquei confuso com esse dois trechos da apostila de Java da Caelum :

Trecho 1:

"Para facilitar esse tipo de caso podemos declarar um vetor (array) de inteiros:

int[] idades;

O int[] é um tipo. Uma array é sempre um objeto, portanto, a variável idades é uma referência. Vamos precisar criar um objeto para poder usar a array. Como criamos o objeto-array?

idades = new int[10];

Trecho 2:

Uma array de tipos primitivos guarda valores, uma array de objetos guarda referências.


Idades é uma array de tipos primitivos ou uma array de objetos?

Idades seria, na verdade, um ponteiro (como em C) que vai apontar para 10 endereços de memória?


class Empresa {
    Funcionario[] empregados;
    String cnpj;
    int livre = 0;

    void adiciona(Funcionario f) {
        this.empregados[this.livre] = f;
        this.livre++;
    }
}

No código acima, por que não preciso especificar o tamanho da array?

Na verdade estou declarando um ponteiro?

No meu método adiciona(), estou alocando memória de forma dinâmica ou sequencial?

5 respostas

Olá, tudo bem ?

Na verdade, essa sua classe Empressa, deve possuir um construtor, lá você deve estar passando o tamanho desse seu array.

Nesse caso é de maneira sequencial, se quiser fazer de maneira dinâmica, temos alguns cursos de algoritmos aqui na alura que mostramos o conceito por trás dos códigos.

Olá Matheus, sei que devo criar um construtor mas a minha dúvida não é sobre isso. No capítulo 4 (voltei ao capítulo porque me surgiram as dúvidas que postei nesse fórum) é pedido a criação da classe empresa nas condições acima (ver código da classe Empresa). Quero entender o que está aconteceu com esse código especificamente. Entendeu?

solução!

Geovane,

Essas foram as dúvidas que você tem :

No código acima, por que não preciso especificar o tamanho da array?

Na verdade estou declarando um ponteiro?

No meu método adiciona(), estou alocando memória de forma dinâmica ou sequencial?

1 - O tamanho do array, precisa sempre ser passado em algum lugar, caso contrário você levará uma exception, por este motivo te disse que era necessário passar no construtor.

2 - Quando você mexe numa posição, funciona como se fosse um ponteiro, você está indo naquela posição do array e alterando o valor que tem lá, se for primitivo você altera o valor, caso for um objeto você altera a referencia que ele está armazenando.

3- Quando você cria um vetor, ele já aloca um espaço na memória, você ao adicionar alguma coisa lá dentro só está manipulando esse espaço.

Espero ter deixado um pouco mais claro

"1 - O tamanho do array, precisa sempre ser passado em algum lugar, caso contrário você levará uma exception, por este motivo te disse que era necessário passar no construtor."

Certo Matheus, você está conseguindo me ajudar. Mas até o capítulo 6 eu não existia construtor. Então provavelmente eu estava definindo o tamanho da minha array no meu método main na criação do objeto funcionario?

A minha dúvida é exatamente essa. Como fui alterando os arquivos perdi onde defini o tamanho da minha array e quero saber como fazia sem o construtor. Entendeu?

Matheus, obrigado pelos esclarecimentos. Estou fechando o post porque já entendi que o tamanho da array estava sendo determinado na main. Obrigado.