* Um byte pode ser convertido em um short, int, long, float ou double
* Um short pode ser convertido em um int, long, float ou double
* Um char pode ser convertido em um int, long, float ou double
* Um int pode ser convertido em um long, float ou double
* Um long pode ser convertido em um float ou double
* Um float pode ser convertido em um double
Erro na questão:
public class Main{
public static void main(String[] args) {
short x = 50;
int y = 10;
x += y;
x = x + y; // Não pode convert int para short
}
}
Comentando as opções:
a) short e int (certo: primeira linha compila, mas a segunda não) x += y; ==> equivalente a x = (short) (x+y)
não há problema nesta construção, pois é possível converter de int para short.
x = x + y;
não compila, pois o resultado da soma deve ser convertido para short.
Esta é a opção correta, pois a primeira linha compila, mas a segunda não.
b) int e short (errado: ambas as linhas compilam corretamente) O tipo int é "superior" ao short, não sendo necessário efetuar a conversão.
c) int e char (errado: ambas as linhas compilam corretamente)
Ao executar a soma, será considerado o código ASCII do caractere utilizado.
Ex.:
int x = 1;
char y = 'a';
x += y; (resultado: 98)
x = x + y; (resultado: 98)
Em ambas as instruções será obtido o valor 98, pois o código do caractere 'a' na tabela ASCII é 97.
d) String e int (errado: ambas as linhas compilam corretamente)
Neste caso o valor do int será convertido para String e concatenado com a String original.
Ex.:
String x = "a";
int y = 1;
x += y; (resultado: a1)
x = x + y; (resultado: a1)
e) int e String (errado: as duas linhas apresentarão erro de compilação) x += y; (erro: o operador "+=" não está definido para os tipos int e String)
x = x + y; (erro: não é possível converter de String para int)