Erro de conversão

por que isso não funciona?

Integer i = new Integer(3); Double z = i;

Os limites inferior e superior comportados por um Double são maiores que os limites comportados por um int. Para saber os extremos dos dois, utilize:

[code]System.out.println(Double.MAX_VALUE);
System.out.println(Double.MIN_VALUE);

System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);[/code]

ok?

Porque Integer é um número inteiro e Double um flutuante?
São objetos distintos que armazenam valores diferentes.

Atualizando: e fique atento ao que o renamed disse, o tamanho de armazenamento deles são diferentes.

Abraços!

e porque isso funciona?

int i = 1;
double d = i;

Releia minha resposta

por que isso NÃOfunciona?

Integer i = new Integer(3); Double z = i;

e porque isso funciona?

int i = 1; double d = i;

Se vocês faz:

Integer i = 1; double d = i;

Não funciona pois está tentando colocar dentro do double um objeto diferente, ou seja, incompatível. Se faz:

int i = 1; double d = 1;

Ele aceita pois int é do tipo primitivo, ou seja, não se trata de um Object e sim de um valor.

Mas para o caso do Integer, a solução é esta:

Integer i = 1; double d = i.intValue();

Abraços!

Olá

  • int e double são primitivos. neste caso você pode atribuir um int para um double;
  • Integer e Double são classes wrappers. Aqui não é possível atribuição de tipos de objetos diferentes;
  • é valido atribuir um int para um Double ou Integer (autoboxing);

Qualquer coisa da uma olhada nas classes wrappers e em regras de boxing.
Espero ter ajudado
[]'s

Obrigado Marcos !