Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Se usa double mesmo quando cabe um float?

Bom dia, quando aprendi C (muito tempo atrás) existia preocupação de não atribuir a uma variável um tipo maior que o necessário (para não alocar memória a toa). Ainda é o costume, ou as memórias são tão grandes hoje em dia que não faz mais diferença?

3 respostas

Opa Gemsanches, tranquilo?

Em Java ainda temos que seguir essa regra de não atribuir valores de um tipo maior para um tipo menor. Faz um tempinho desde que eu programei em C, mas acredito que as regras são parecidas aqui no Java. Então o compilador do Java vai reclamar caso haja a possibilidade do número truncar.

Quando fazemos a conversão de um tipo menor para um tipo maior. como um valor int para um double, por exemplo, o compilador permite sem problemas já que não há um risco de perdermos informações nessa conversão. É o que chamamos de casting implícito ou promoção.

double d = 3.1415;
int i = d; // não compila
int i = 5;
double d2 = i; // compila

Agora, se quisermos fazer o contrário convertendo um double para um int, fazemos o casting explícito, também conhecido como só casting mesmo.

double d3 = 3.14;
int i = (int) d3; // compila mesmo correndo o risco de truncar

Bom, acho que é isso. Se quiser dar uma olhada no trecho da apostila da Caelum de onde eu peguei os exemplos e que fala um pouco mais sobre isso é só acessar esse link.

Espero que isso ajude. Se ficou alguma dúvida é só avisar!

Bons estudos!!

Oi Thiago

Obrigado pela resposta, mas acho que expressei mal minha dúvida.

O que eu quero saber é se eu declaro

double d = 3.1415;

mesmo quando o valor (3,1415) cabe em uma variável menor (float no caso).

Eu sei que eu posso declarar como 'double' ou como 'float' que funciona, minha dúvida é se ainda existe a preocupação de usar o tipo com menor quantidades de bytes.

Colocando em contexto, eu aprendi C há uns 15 anos (e com um material provavelmente antigo para a época) e tinha-se a preocupação de não sobrecarregar a memória com alocações desnecessárias. Minha dúvida é se essa preocupação ainda existe.

solução!

Ahh acho que entendi... Nesse caso, a preocupação com a memória hoje em dia definitivamente é bem menor. São só em casos bem específicos onde qualquer melhora na performance e memória já ajuda, por menor que seja. Um exemplo disso seriam jogos, onde temos vários cálculos complexos sendo realizados ao mesmo tempo, e numa situação dessas qualquer performance já ajuda.

Inclusive, só adicionando um pouco mais de informação em relação ao double e float já que usamos eles como exemplo. O Java adotou o double como padrão no lugar do float por conta da precisão que ele oferece, então veja que mesmo ele ocupando o dobro de memória que o float, ainda assim na imensa maioria dos casos usaremos tipos priorizando muito mais os outros aspectos que eles oferecem, deixando o tamanho e a performance no segundo plano. O float, no final, acaba servindo para o caso de jogos como eu mencionei ou quando precisamos lidar com sistemas legado que ainda utilizam várias bibliotecas que ainda usam float.

Não sei se era exatamente essa a dúvida, mas me avisa aí se fez sentido o que eu escrevi! rs