Tipo de Instância ou referencia: Uma classe define um tipo de dado. Ela não pode ser usada a não ser que seja instanciada. Uma instância é um objeto do tipo definido pela classe. Qualquer classe pode ser instanciada como qualquer outro tipo da linguagem Java. Quando declarada uma variável de um tipo de referência, está se especificando que a variável irá referenciar, ou apontar, para um objeto em vez de gravar um simples valor no caso de um primitivo. Diferenças entre primitivos e de Instância: A diferença mais evidente está na necessidade de reservar memória para o objeto através do uso do operador “new”. Por outro lado, a declaração de um tipo primitivo já indica para a jvm reservar memória para o mesmo. O operador “new” realiza uma série de tarefas: -Reserva espaço na memória suficiente construtor; -Realiza a chamada do método construtor; -Retorna uma referência (ou instância) para o novo objetivo criado; Memória stack e Heap: A memória da aplicação está dividida em duas partes stack e heap. A memória stack (pilha) é um bloco de memória que é incrementado toda vez que um método e chamado e esvaziado quando o método é finalizado. A memória heap é um pool de memória de propósito geral, onde todos os objetivos Java ficam. As variáveis instância armazenam na memória stack um referência de um objeto que está na memória heap. Cast entre tipos primitivos: È possível atribuir o conteúdo de uma variável a outro, porem se a variável de origem for de um tipo diferente da variável de destino, o dado pode ter de passar por um processo de convensão antes de ser armazenado. Vejamos os tipos primitivos, observando o tamanho de cada um. 6 Byte 5 Stack 4 Int 3 Long 2 Float 1 Double 0 Pela figura podemos observar que uma variável do tipo “cabe” dentro de uma variável do tipo int, e que uma do tipo long, “cabe” dentro de uma do tipo “float”. Porém uma variável do tipo Double não “cabe” dentro de uma do tipo “stack”. Quando um tipo “cabe” dentro do outro, independente do valor armazenado, dizemos que a conversão (cast) de tipos é automática. Quando um tipo não “cabe” dentro do outro, porém o valor armazenado na variável “cabe” temos que fazer a conversão (cast) de forma explícita. Ex: public class ConversaoTipos{ Public static void main(String args[]){ Byte mbyte=10; Stack mshort=20; Int mint=30; Long mbng=40;] Float mfloat=50.0f; Double mdouble=60.0; //cast automático: byte para int Int 0=mbyte; //cast explícito double para long Long h=(long)mdouble; //cast automatico: float para double Double c= mFloat; //cast explicito: long para short Short d=(short)mbng; } } Classes Wrapper : Uma variável constante ou atributo cujo tipo seja primitivo, somente é cpaz de armazenar um único dado. Além disto, não dispõem de qualquer método. No entanto, existe uma classe wrapper (invólucro) para cada um dos tipos primitivos. Tipo Primitivo Boolean Char Byte Short Int Long Float Double Classe Wrapper Java.lang.Boolean Java.lang.character Java.lang.byte Java.lang.short Java.lang.integer Java.lang.long Java.lang.float Java.lang.double Cada uma delas serve para representar dados de um dos tipos primitivos na forma de objetos. A grande vantagem é que essas classes possuem métodos para realizar a conversão do tipo primitivo que ela representa em texto e vice-versa e oferecem constantes e métodos úteis a manipulação desse dado. Métodos para conversão: Todas as classes wrapper possuem um construtor que recebe como parâmetro um valor do tipo primitivo correspondente. Ex: Integer in = new Integer(10); Character = new Character (‘A’); Todas as classes wrappers , com exceção de character, recebem parâmetros uma string. Float f1= new Float(“1034.566”); Boolean bo= new Boolean (“false”); Todas classes wrapper, com exceção de character e Boolean, possuem um método “pause” que recebe uma string e retorna um tipo primitivo. Short sh= Short.parseShort(“1034”); Double d= Double,parseDouble(“1276.62”); Todas as classes wrapper numérica (Byte, Short, Integer, Long, Float e Double) derivam de uma classe chamada Number, e devido a isto sobrescrevem seus seis métodos (bytevalue(), shortvalue(),intvalue(), longvalue(),floatvalue() e Doublevalue()). Ex: Public calss ExemploConversao{ Public static void mian(String args[]){ Double d= New Double (120); Byte b= d.byteValue(): Short s=d.short.Value(); Int i=d.int.Value(); Long l=d.long.Value(); Float f=d.float.Value(); } }