Quais as linhas que causarão problemas na compilação?
01 public class Teste {
02 public static void main(String[] args) {
03 byte a = 120;
04 byte b = 5;
05 byte c = a + 5;
06 byte d = 3 + 5;
07 int e = 1 << a;
08 long f = 2 * 0x1234567890123456L;
09
10 a += 5;
11 a = 1 << 2;
12 b <<= 2;
13 b = a << 2;
14 a <<= a << 1;
15 }
16 }
questão de certificação… não tenho muita certeza, mas na teoria é isso:
o tipo resultante do operador << é sempre int, ou seja, se vc for colocar o resultado em uma variavel ela precisa ser do tipo int, a não ser que vc use o operador <<= que internamente faz o cast apropriado.
ou seja, eu chutaria, linhas 11 e 13.
Henrique,
Na verdade as linhas 5 e 13 não compilarão. Porque o resultado das duas operações será um int que não poderá ser convertido implicitamente para byte.
No caso da linha 11 não haverá problema porque apesar do resultado ser um int, haverá a conversão implícita.
Eu bolei uma regra meio maluca, mas que tem dado certo:
-
O resultado de operações envolvendo literais inteiros é sempre int e poderá ser atribuído a variáveis byte, char ou short, se o valor sendo atribuído não causar overflow ou underflow.
-
O resultado de operções envolvendo variáveis e/ou literais será do tipo de container maior, exceto quando um dos operandos for byte, char ou short quando o resultado será int.
O que acha? :roll: