Tipo primitivo double

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

[quote=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?
[/quote]

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.

[quote=sergiotaborda][quote=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?
[/quote]

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.

[/quote]

valeu Sergio

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.

[quote=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.
[/quote]

Agora deu uma boa clareada, obg mesmo