Dúvida com Casting!

12 respostas
M

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:

// Declare uma variavel chamada "numero":
	   int numero;

	// Atribua o valor 1483 a variavel "numero":
	   numero = 1483;

	// Multiplique a variavel "numero" por 45,5:
	   [b]numero = numero * 45.5; 
	   numero *= 45.5;[/b]

	// Imprima o valor na console (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.

Obrigado!

12 Respostas

J

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

Obrigado jhonatandarosa, gostaria que se possível que você me indicasse algum material que tivesse essa informação.

Desde já, Obrigado!

Z111


http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter02/primitives.html

M
Obrigado Z, porém procurei no link que você me indicou, mas não consegui achar nada sobre casting implícito nos casos em que utilizar os operadores conjuntos com atribuição (*=, +=, -=, etc) como na operação:

int numero;

numero = 1483;

numero *= 45.5;
T

http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.26.2

M

Obrigado thingol!

I

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

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

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

double x = 22.98 ; 
float xx = 22.98f;

para double ja esta implicito a declaração d no final do valor =)

E

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.

Criado 30 de março de 2009
Ultima resposta 22 de set. de 2009
Respostas 12
Participantes 8