Bom dia pessoal, estou fazendo um curso de java e o professor passou um exercicio que me trouxe uma dúvida.
O exercício é o seguinte:
//Declareumavariavelchamada"numero":intnumero;//Atribuaovalor1483avariavel"numero":numero=1483;//Multipliqueavariavel"numero"por45,5:[b]numero=numero*45.5;numero*=45.5;[/b]//Imprimaovalornaconsole(terminal):System.out.println("O valor de numero e: "+numero);
Na aula nos foi passado que na operação entre um inteiro e um double o retorno é sempre um double, logo quando tento fazer: numero = numero * 45.5; o compilador não deixa passar, pois a variável “numero” é um inteiro, mas quando faço a operação de forma reduzida numero *= 45.5; o compilador deixa passar e atribui a variável “numero” o resultado da múltiplicação sem a parte decimal.
Gostaria de saber se na forma reduzida acontece algum casting implícito ou se é algum bug do compilador.
Acontece casting… sempre que você utilizar operadores conjuntos com atribuição (Não lembro se é bem esse o nome mas…), por exemplo *=, -=, +=, /=, %= o compilador faz um casting para o tipo da variável que está sendo atribuído o valor.
[]'s
M
Marney
Obrigado jhonatandarosa, gostaria que se possível que você me indicasse algum material que tivesse essa informação.
Tenho uma dúvida,
Qual a diferença de uma conversão e um casting
por exemplo
eu tenho um
int a = 2;
ai…
eu faço
integer.toString( a );
certo?
e ai… eu faço
(String)a
qual a diferença…
outra dúvida…
o único meio de converter de int para float é fazendo casting?
tipo…
eu tenho uma variável media
e um arraylist lista
ai… eu queria fazer a media
( a media tem a soma de todas as notas…)
media/lista.size()
so que isso é uma divisão inteira
para fazer divisao real eu fiz
(float)media/(float)lista.size()
este é o único caminho???
Obrigado desde ja…
E
enantiomero
Você não pode efetuar o cast de um tipo primitivo para um tipo objeto. Em particular, isso vai dar erro de compilação.
É. Só que eu indicaria usar sempre double, não float.
I
itopaulo
valeu…
Polimorphism
Aproveitando a citação do double x float, porque recomendam usar sempre double quando a maioria das vezes não é necessária uma prescisão tão grande?
edmarr
Porque para float vc tem q usar uma atribuição diferente
tipo
doublex=22.98;floatxx=22.98f;
para double ja esta implicito a declaração d no final do valor =)
E
enantiomero
O tipo de dados de ponto flutuante do hardware de seu processador é, internamente, double (64 bits) ou extended double (80 bits), então é melhor usar a precisão maior que a menor, já que você irá evitar uma conversão lenta do processador de 64 para 32 bits a cada vez que os dados são trocados entre o processador e a memória.
E a precisão do “float” é realmente muito baixa; ela só deve ser usada em algumas rotinas gráficas que compensam a precisão menor.