Já li em alguns livro mais não estou compreendendo o que é operador de coerção alguém com muita paciência pode me explica como neste exemplo
double average;
int total;
int gradeCounter;
average = (double) total / gradeCounter;
Já li em alguns livro mais não estou compreendendo o que é operador de coerção alguém com muita paciência pode me explica como neste exemplo
double average;
int total;
int gradeCounter;
average = (double) total / gradeCounter;
Coerção em português é “cast” em inglês.
Em Java ele serve para duas coisas:
int total = 0;
double average = (double) total;
Por exemplo, se você tiver algo como:
Number n = new Long (10);
Long x = (Long) n;
onde Long é uma subclasse de Number,
você sabe que a variável n (cujo tipo é Number) contém um objeto do tipo Long. Portanto você pode efetuar a coerção para Long.
Cara soh pra ver se eu entedi mesmo bem usa-se o cast quando eu quero converter tipo certo…??
[code]
int total =10;//tipo int primitivo
double account;
account = (double) total;
a variavel account recebe total que vale 10 mais com ponto flutuante
dai fica 10.0 é isso…??
Numero n = new Float (10);
Float x = (Float) n;
No caso de variaveis por referencia o cast funciona da seguinte forma
eu sei que a variaveis n e do tipo Numero e contém um objeto Float
dai para que a variaveil x que é Float receba a variavel n que tem um
objeto Float é soh eu usar um cast para converter de Numero para Float
é isso…???
Cast em Java não é sempre conversão. Cuidado :!
É conversão apenas no primeiro caso (tipos primitivos).
No segundo caso é reinterpretação (ou seja, você não pode forçar alguma coisa a tornar-se outra que ela não é. Exemplo:
class Pessoa {}
interface Presidente {}
interface Politico {}
interface Metalurgico {}
interface Operario {}
interface Engenheiro {}
interface Medico {}
interface Professor {}
class Lula extends Pessoa implements Presidente, Politico, Metalurgico, Operario {}
Pessoa lula = new Lula();
Presidente pres = (Presidente) lula; // isto é OK
Engenheiro pr = (Engenheiro) lula; // vai haver um ClassCastException
. Outro exemplo:
class Cliente {}
class ClienteEspecial extends Cliente {}
class Mercado {]
class SuperMercado extends Mercado {}
...
Cliente c = new ClienteEspecial(); // isto é OK pois um ClienteEspecial É UM Cliente.
Mercado m = (Mercado) c; // isto não é OK porque c nunca será um Mercado.
Mercado m2 = new SuperMercado();
SuperMercado s = (SuperMercado) m2; // isto é OK porque você sabe que m2 É UM SuperMercado
m = new Mercado();
SuperMercado s2 = (SuperMercado) m; // Isto não é OK porque m não contém um SuperMercado.
no seu caso como aplicou a um tipo primitivo… vc está convertendo o valor do tipo inteiro temporariamente em double… isso nao quer dizer que seu int passou a ser double apenas ali aonde tem o fator coerção ele é double.
Isso acontece qdo vc quer somar int com double… e eh preciso usar a coerção para ter o resultado mais preciso…