DEV Community

Criação de objetos

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.

Top comments (0)