Tipos de referência
Um tipo de referência refere-se a um objeto (instância de uma classe). Ao contrário dos tipos primitivos que contêm seus valores na memória onde a variável é alocada, referências não mantêm o valor do objeto a que se referem. Em vez disso, uma referência "aponta" para um objeto, armazenando o endereço de memória onde o objeto está localizado, um conceito referido como um ponteiro. Ao contrário de outras linguagens, o Java não permite que você saiba qual é o endereço da memória física. Você pode usar somente a referência para se referir ao objeto.
Vamos dar uma olhada em alguns exemplos que declaram e inicializam os tipos de referência. Suponha que nós declaramos uma referência do tipo java.util.Date e uma referência do tipo String:
java.util.Date today;
String greeting;
A variável today é uma referência do tipo Date e só pode apontar para um objeto Date. A variável greeting é uma referência que pode apontar apenas para um objeto String. Um valor é atribuído para uma referência de duas maneiras:
■ Uma referência pode ser atribuída a outro objeto do mesmo tipo.
■ Uma referência pode ser atribuída a um novo objeto usando a palavra-chave new.
Por exemplo, as seguintes instruções atribuem essas referências a novos objetos:
today = new java.util.Date();
greeting = "How are you?";
A referência de today agora aponta para um novo objeto Date na memória e today pode ser usado para acessar os vários campos e métodos deste objeto Date. Da mesma forma, a greeting aponta para um novo objeto String, "How are you?". Os objetos String e Date não tem nomes e só pode ser acessado através de sua correspondente referência. Figura 1.1 mostra como os tipos de referência aparecem na memória.