Com esse bloco de codigo está intanciando objetos sempre com a mesma referencia?
for (int i = 0; i < 5; i++) {
Funcionario f = new Funcionario();
f.salario = 1000 + i * 100;
empresa.adiciona(f);
}
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Com esse bloco de codigo está intanciando objetos sempre com a mesma referencia?
for (int i = 0; i < 5; i++) {
Funcionario f = new Funcionario();
f.salario = 1000 + i * 100;
empresa.adiciona(f);
}
No Java o NEW é o instanciador. NEW trata de reservar memória o suficiente para o objeto e criar automaticamente uma referência a ele.
Então nesse caso toda vez que você faz um
Funcionario f = new Funcionario();
A instância do objeto muda. Você pode verificar isso fazendo um sysout no Funcionario F. Irá acontecer algo tipo assim no seu console:
Funcionario@30e79eb3
Funcionario@366412da
Funcionario@6411c21b
Funcionario@49deadf0
Entretanto se você mudar um pouco o código e colocar a instancia do funcionário para fora do laço.
Funcionario f = new Funcionario();
for (int i = 0; i < 5; i++) {
f.setSalario(1000 + i * 100);
System.out.println(f);
}
Verá que o resultado do sysout será algo assim:
Funcionario@30e79eb3
Funcionario@30e79eb3
Funcionario@30e79eb3
Funcionario@30e79eb3
Ou seja, só uma instância.
Espero ter ajudado.
Muito obrigado :)
Minha pergunta era se é o mesmo objeto? Dentro do laco esta instanciando em cada iteracao um objeto do tipo Funcionario mas sempre com a mesma referencia.
Então, não é o mesmo objeto. NEW trata de reservar memória o suficiente para o objeto e criar automaticamente uma referência a ele.
Toda vez que você instância o funcionário F está criando um outro objeto na memorial com uma nova referencia.
Ao fazer esse procedimento por trás o Java está apontando (uso de ponteiros) para outro espaço de memória.
Você pode validar esse funcionamento com o seguinte exemplo :
ArrayList<Funcionario> funcs = new ArrayList<Funcionario>();
for (int i = 0; i < 5; i++) {
Funcionario f = new Funcionario();
f.setSalario(1000 + i * 100);
funcs.add(f);
}
for (Funcionario funcionario : funcs) {
System.out.println(funcionario.getSalario());
}
Nele para cada NEW ou seja, objeto novo. Adicionei dentro de uma ArrayList e em seguida mostrei o conteúdo do ArrayList com os funcionários dentro deles e seus respectivos salários.
Se fosse o mesmo objeto iria sempre mudar o valor do salário para o último. Mas como são objetos diferentes os valores são diferentes para cada Funcionário F.
Resultado do SysOut fica:
1000 1100 1200 1300 1400
Espero que tenha ficado claro agora.
Muito Obrigado :)