Como os objetos são criados
A linha Vehicle minivan = new Vehicle(); declara um objeto do tipo Vehicle.
A declaração faz duas coisas:
Declara uma variável chamada minivan da classe Vehicle.
Cria uma cópia física do objeto e atribui à minivan uma referência a ele usando o operador new.O operador new aloca dinamicamente memória para um objeto e retorna uma referência a ele.
A referência é, mais ou menos, o endereço do objeto na memória alocado por new.
A referência é então armazenada em uma variável.
Em Java, todos os objetos de uma classe devem ser alocados dinamicamente.
As duas etapas da instrução podem ser reescritas para mostrar cada etapa individualmente.
Vehicle minivan; // declara uma referência ao objeto.
minivan = new Vehicle(); // aloca um objeto Vehicle.
A primeira linha declara minivan como referência a um objeto de tipo Vehicle.
minivan é uma variável que pode referenciar um objeto, mas não é um objeto.
Por enquanto, minivan não referencia um objeto.
A próxima linha cria um novo objeto Vehicle e atribui à minivan uma referência a ele.
Agora, minivan está vinculada a um objeto.
As variáveis de referência e a atribuição
Variáveis de referência de objeto agem diferente de variáveis de tipo primitivo em operações de atribuição.
Em variáveis de tipo primitivo, a variável da esquerda recebe uma cópia do valor da variável da direita.
Em variáveis de referência de objeto, a variável da esquerda passa a referenciar o mesmo objeto da variável da direita.
Isso pode causar resultados inesperados.
Exemplo:
Vehicle car1 = new Vehicle();
Vehicle car2 = car1;car1 e car2 referenciam o mesmo objeto.
Alterações feitas através de car1 ou car2 afetam o mesmo objeto.
Quando:
car1.mpg = 26;
System.out.println(car1.mpg);
System.out.println(car2.mpg);Terá saída 26.
car1 e car2 referenciam o mesmo objeto, mas não estão vinculadas de outras formas.
Atribuições subsequentes a car2 não afetam car1.
Exemplo:
Vehicle car1 = new Vehicle();
Vehicle car2 = car1;
Vehicle car3 = new Vehicle();
car2 = car3;car2 passa a referenciar o mesmo objeto que car3.
O objeto referenciado por car1 permanece inalterado.