ola pessoal, eu sei que este codigo abaixo nao compila pq eu nao fiz o cast explicitamente
short s = 1;
byte b = s;
e porque esse compila:
final short s = 1;
byte b = s;
ola pessoal, eu sei que este codigo abaixo nao compila pq eu nao fiz o cast explicitamente
short s = 1;
byte b = s;
e porque esse compila:
final short s = 1;
byte b = s;
Isso é uma particularidade - você pode inicializar um byte com uma constante entre -128 e +127, sem fazer o cast, se o compilador conseguir determinar que o valor é uma constante e tem esse valor. No caso, final short s = 1 é uma constante, e está entre -128 e +127, portanto foi possível ao compilador fazer a tal inicialização.
É isso mesmo que o thingol disse. Em Java, os números literais ou são do tipo double ou do tipo int. Desde que esteja dentro da capacidade do tipo da variável, nos casos em que um literal do tipo int é atribuído a uma variável do tipo byte, short ou char, o compilador resolve a conversão internamente, sem a necessidade de casting.
No caso do seu código, isso acontece porque o operador do lado direito tem que ser uma constante em tempo de compilação (final) para que o compilador resolva a conversão.
[]'s
Yuri