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);
}
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 :)