Alguns valores sao incompativeis se voce tentar fazer uma atribuicao direta. Quando uma variavel tem o tipo double sera impossivel representar em uma variavel do tipo int. Porque nao se sabe se realmente e um numero inteiro ou nao. Resumindo: Casting e quando precisamos ordenar que o numero quebrado seja moldado como um numero inteiro (nesse caso).Ex:double d3 = 3.14;int i = (int) d3;Repare que nesse caso ira imprimir o numero "3". Pois o int so recebe valores inteiros e o ".14" sera ignorado, uma vez que nesse exemplo se trata de um numero inteiro.O Casting foi feito para moldar a variavel.Exemplo:long x = 1000;int i = x; //ha perda de informacaoSe quisermos fazer realmente isso:long x = 1000;int i = (int) x;Lembre-se que o unico tipo primitivo que nao pode ser atribuido a nenhum outro tipo e o Boolean.Mais sobre CastingUtilizamos o casting ou moldagem para converter um objeto ou primitiva de um tipo para outro. Podemos converter um double em um int, ou uma subclasse em uma superclasse.A regra fundamental para moldagem e: o casting nao modifica o objeto ou valor que esta sendo moldado; porem, o receptor do cast constitui um novo objeto ou um novo tipo.O casting de dados primitivos ocorre com bastante frequencia. A maneira pelo qual o casting age depende da precisao dos dados envolvidos. Por sua vez, a precisao depende da quantidade de informacoes que um tipo pode conter; assim, um tipo de ponto flutuante double tem maior precisao que um float, pois o primeiro e um tipo de 64 bits e o segundo, de 32 bits.Sempre que houver uma transferencia de dados de um tipo menos preciso para um mais preciso, o casting explicito nao e obrigatorio.int i = 3;double pi = i + .14159;Ja a transferencia de dados de um tipo mais preciso para um menos preciso requer um casting explicito. Isso ocorre porque pode haver perda de dados durante a moldagem. Java pretende alertar o programador do possivel perigo de uma conversao desse tipo:double pi = 3.14159;int i = (int)pi; // variavel definida como 3; perda de .14159O casting entre objetos requer um pouco mais de cuidado. Para ilustrar uma aplicacao de casting para objetos, vamos analisar a classe Hashtable do JDK da Sun. Ela utiliza instancias da classe Object e as insere em uma tabela de hash, por meio de um metodo chamado put(), no qual um String e usado como chave.Vamos supor que voce tenha uma classe chamada MinhaClasse e um String usado como chave em uma variavel chave. Incluimos essa chave em um objeto Hashtable da seguinte maneira:MinhaClasse MeuObjeto;hash.put(chave.MeuObjeto);Vamos supor que seja necessaria a armazenagem de MeuObjeto como Object proprio, ou seja, um cast de uma subclasse como uma superclasse. Isso seria feito da seguinte forma:hsh.put(chave,(Object)MeuObjeto);Ao fazer este cast, perde-se a funcionalidade de MeuObjeto.E possivel tambem converter o Object retronado por get() no MeuObjeto original, atraves de:MinhaClasse MeuObjeto;hash.put(chave,MeuObjeto);MinhaClasse MeuObjeto2 = (MinhaCLasse)hash.get(chave);// obtem de volta o MeuObjeto originalNao e possivel fazer o cast de tipos de dados primitivos como objetos ou vice-versa. Entretanto, pode-se realizar essas conversoes utilizando as classes