Tipo primitivo double

4 respostas
dntalemao

Galera, quando vou declarar assim:

double d=10;

ai vai acontecer a conversão implícita de int para double, então o uso do “d” nunca se fará necessário? Já que o “d” serve apenas para identificar. Exemplo:

double cm=100d;

já o “f” do float tem finalidade, como por exemplo forçar uma variável a ocupar o espaço de um float, já que por padrao, o java considera todo numero de ponto flutuante um double.

float f=10.0; //resultará em erro no compilador.

float f=10.0f; //maneira correta.

O “d” seria apenas representativo?
abraços

4 Respostas

sergiotaborda

dntalemao:
Galera, quando vou declarar assim:

double d=10;

ai vai acontecer a conversão implícita de int para double, então o uso do “d” nunca se fará necessário? Já que o “d” serve apenas para identificar. Exemplo:

double cm=100d;

já o “f” do float tem finalidade, como por exemplo forçar uma variável a ocupar o espaço de um float, já que por padrao, o java considera todo numero de ponto flutuante um double.

float f=10.0; //resultará em erro no compilador.

float f=10.0f; //maneira correta.

O “d” seria apenas representativo?

Não. O d é a forma de escrever um double literal.
Quando vc escreve 01234 isto não é um inteiro igual a 1234. É um octal.
Quando vc escreve um literal vc deve escreve o literal corretamente e nunca confiar na promoção.

Tente isto

Double d = 10;

Não vai funcionar dando “Type mismatch: cannot convert from int to Double”.
Porquê ? (pense um pouco antes de continuar)

A promoção só funciona para primitivos. Quando vc escreve 10 isto significa um inteiro. Sempre. O compilador pode fazer a promoção - se ele conseguir- mas o correto é colocar o d para indicar que se pretende um double.

O código acima não funciona porque o compilador entende assim “10 é um inteiro e está sendo atribuido a uma variável de objeto, então preciso fazer auto-boxing” ai ele muda o codigo para

Double d = Integer.valueOf(10);

Ai ele vê "Hum… não dá para por um Integer num Double, então não dá para por um int num Double. Ai ele produz aquela mensagem de erro.
Mas se vc usar d ele troca o codigo para

Double d = Double.valueOf(10);

O que , obviamente, funciona.

As formas literais dos tipos são importantes e devem ser usadas explicitamente.

dntalemao

sergiotaborda:
dntalemao:
Galera, quando vou declarar assim:

double d=10;

ai vai acontecer a conversão implícita de int para double, então o uso do “d” nunca se fará necessário? Já que o “d” serve apenas para identificar. Exemplo:

double cm=100d;

já o “f” do float tem finalidade, como por exemplo forçar uma variável a ocupar o espaço de um float, já que por padrao, o java considera todo numero de ponto flutuante um double.

float f=10.0; //resultará em erro no compilador.

float f=10.0f; //maneira correta.

O “d” seria apenas representativo?

Não. O d é a forma de escrever um double literal.
Quando vc escreve 01234 isto não é um inteiro igual a 1234. É um octal.
Quando vc escreve um literal vc deve escreve o literal corretamente e nunca confiar na promoção.

Tente isto

Double d = 10;

Não vai funcionar dando “Type mismatch: cannot convert from int to Double”.
Porquê ? (pense um pouco antes de continuar)

A promoção só funciona para primitivos. Quando vc escreve 10 isto significa um inteiro. Sempre. O compilador pode fazer a promoção - se ele conseguir- mas o correto é colocar o d para indicar que se pretende um double.

O código acima não funciona porque o compilador entende assim “10 é um inteiro e está sendo atribuido a uma variável de objeto, então preciso fazer auto-boxing” ai ele muda o codigo para

Double d = Integer.valueOf(10);

Ai ele vê "Hum… não dá para por um Integer num Double, então não dá para por um int num Double. Ai ele produz aquela mensagem de erro.
Mas se vc usar d ele troca o codigo para

Double d = Double.valueOf(10);

O que , obviamente, funciona.

As formas literais dos tipos são importantes e devem ser usadas explicitamente.

valeu Sergio

ViniGodoy

Um exemplo de caso onde isso é necessário:

Veja o resultado disso:

int y = 114; double x = y / 10;

E disso:

int y = 114; double x = y / 10d;

No primeiro caso, o que acontece do lado direito é uma divisão de dois inteiros, y e 10. Portanto o resultado é o inteiro 11, que é atribuído ao double, ficando 11.0.

No segundo, é uma divisão de 114 pelo double 10.0. Portanto, o resultado será um double, 11.4. E isso é atribuído a x.

dntalemao

ViniGodoy:
Um exemplo de caso onde isso é necessário:

Veja o resultado disso:

int y = 114; double x = y / 10;

E disso:

int y = 114; double x = y / 10d;

No primeiro caso, o que acontece do lado direito é uma divisão de dois inteiros, y e 10. Portanto o resultado é o inteiro 11, que é atribuído ao double, ficando 11.0.

No segundo, é uma divisão de 114 pelo double 10.0. Portanto, o resultado será um double, 11.4. E isso é atribuído a x.

Agora deu uma boa clareada, obg mesmo

Criado 26 de julho de 2012
Ultima resposta 26 de jul. de 2012
Respostas 4
Participantes 3