Só estudando para o SCJP para perceber que algumas coisas em java não são padronizadas.
Percebi isto testando o seguinte código:
byte b1 = 10;
byte b2 = 13;
b1 = b1*b2;
Este código ocorrera um erro. Ok tudo bem a regra diz que qualquer operação efetuada entre números inteiros retornara um tipo int por PADRÃO. Neste caso com um tipo int ?32bits? resultado da operação de multiplicação b1 * b2 será maior que um byte ?8bits?. Neste caso tem que ter uma conversão explicita.
b1 = (byte)(b1*b2);
ou conversão automática
b1 += b1*b3; //Apesar de não efetuar o mesmo resultado
Já em float a estória de conversão de java me queima os neuronios.
float f1 = 10.1F;
float f2 = 3.2F;
f1 = f1 * f2; // Ok
Não consigo engolir que a expressão f1 * f2 pode ser atribuído direto a uma variável float ?32bits? sem conversão explicita, sendo que diz a regra: Operações entre numero de ponto flutuante retornarão por PADRÃO tipo double ?64bits?.
Alguém poderia me dizer por que isto é valido em tipo float???
Se falei alguma coisa nada haver... me corrijam...