8
respostas

Cast x Conversão

Boa noite. Amigos, pesquizei em alguns foruns da internet e não encontrei a resposta para sanar uma duvida: qual seria a diferença entre convert e cast? os dois não seriam a mesma coisa? tudo o que entendi, é que o cast é utilizado quando sabemos que ocorrerá perda de valores. tipo double para int.

8 respostas

O cast é usado simplesmente para vc referenciar o mesmo objeto através de outro tipo.. Ex:

Funcionario  funcionario = new Gerente();
Gerente gerente = (Gerente)funcionario;

Como vc sabe que funcionario referencia Gerente, vc vai e faz o cast para Gerente. Só que vc ainda tem apenas um objeto na memória, só que com 2 referências, uma do tipo Funcionario e outra do tipo Gerente.

Quando vc faz uma conversão, aí sim você está tentando sair de um tipo para outro. Ex:

String numero =  "10";
int numeroInt = Integer.parseInt(numero);

Agora vc criou um um int a partir de uma string.. no seu programa, vc teria 2 objetos na memória com referências para os 2.

insira seu código aquiOi Alberto, então. o cast como vc disse é usado para referenciar o mesmo objeto com outras variaveis. mas por que no caso seria um cast, e não pode ser simplesmente uma atribuição? eu tentei aqui e deu um erro de compilação. até mais.

Por exemplo, eu pensava que funcionario podia instansiar um gerente por que é gerente é filho de funcionario. mas agora um gerente referenciar um funcionario? a idéia meio que me confundiu um pouco

Maurilio,

O Cast serve para dizer que o valor de um objeto é de determinado tipo. Por exemplo, digamos que você crie uma variável dessa forma:

object variavel = 10;

Nesse caso o valor dessa variável é um inteiro, certo?! Mas para o compilador essa variável é do tipo object, mesmo que o valor dessa seja int. Digamos que você queira utilizar essa variável como inteiro, dai você usa o Cast, que apenas diz para o compilador que o conteúdo dessa variável é do tipo que você está informando:

int variavelInt = (int)variavel;

Isso não irá gerar erro de compilação. Mas porque você não pode usar direto, sem fazer o Cast? Justamente porque o compilador entende que a variável é object e não um inteiro.

Esse pequeno exemplo serve para todos os outros tipos de objetos.

Então, quando é que você usa o Convert? Nesse caso é para realmente converter uma coisa em outra, por exemplo, uma string em um inteiro:

int inteiro = Convert.ToInt32("10");

Nesse caso a string contém o texto "10", mas ainda é um texto, não é um inteiro realmente e para usar o valor "10" como inteiro dai você converte o valor.

Espero que isso te ajude a entender. Abraço.

oi silvio, então quando temos uma variavel object com um inteiro e fazemos o cast, e stamos dizendo para a variavel receber aquele valor, por que é inteiro?

É basicamente isso aí.

insira seu código aquiobrigado, cara. posso entender assim então por hora né?

Sim, exatamente, o cast serve para informar o tipo da variável. Por exemplo, se você precisar fazer uma operação com a variável do tipo object que tem o valor 10, citada acima, sem o cast não vai ser possível, pois o compilador entende que ela é um object e não permite que você faça a operação entre tipos diferentes, como essa object e uma outra int, por exemplo.