TODO To change the template for this generated type comment go to
Window - Preferences - Java - Code Style - Code Templates
*/
public class Shorts {
public static void main(String[] args) {
short a = 10;
short b = (short) (a + a);
System.out.println("B vale " + b);
}
}[/code]
Agora a uma explicação um pouco mais técnica rs… não que eu seja alguém que possa falar algo assim…
As regras para adição… byte, char, int e short serão convertidos para inteiro na operação… poréeeeeeeeeem, se um dos valores for long, o resultado será dado em long, se um for float, o resultado será float, se um for double, o resultado será em double. Abraços, espero ter ajudado um pouco. Boa noite =]
Bem, qualquer operação entre dois numeros inteiros irá te voltar no minimo um int (pode ser long)
e entre dois numeros de ponto flutuante irá sempre te voltar um double.
So corrigindo, se algum operando for um float o resultado será um double
Booooooooooom dia, já é quase sexta!!! heheheh, valeu por tentar corrigir… mas cuidado para não passar dados inconsistentes para o guri… olha só, o que você disse… está ERRADO rsrsrs, vamos a explicação:
1 - double
2 - float
3 - long
4 - int
5 - char or short (char é um short sem sinal = 16 bytes de qualquer forma)
6 - byte
Para descobrir o tipo de retorno, faça o seguinte, pegue uma soma ae qualquer, float + double por exemplo… então vamos na lista básica acima e verificamos qual dos dois tipos está primeiro… portantooo… é DOUBLE, agora se fizermos float + int ??? É FLOAT! Não double meu caro…
Espero ter ajudado… e caso relutem e joguem garrafas, vaiem, reclamem que não está correto… mais uma exxxxxxxplicação, mas desta vez não sou eu que vou dá-la, e sim a SUN rsrsrs… abraços
Ok, galera!
Tuda a discurssão esclareceu bastante!
Resumindo então…
Para saber o retorno de soma (ou qualquer operação) entre tipos primitivos diferentes basta utilizar a tabelinha:
A preferencia será sempre do primeiro para o ultimo…
Quando se trata de operações de mesmos tipos o unico “problema” é quanto ao retorno dos tipos “char, short e byte”, pois esses retorna um “int”, certo?
Um long?
Como isso pode acontecer???
Bem… me corrigam se eu estiver errado…
O problema ai, ocorre quando uso valores literais por exemplo:
float a = 1.5; //Ocorre um erro de compilação...
float b = 1.5f; // Ok!!!
float c = 1.5 + 1.3; //Erro!
float d = 1.5f + 1.3; //Erro!
float e = 1.5f + 1.3f; //Ok!!!
float f = 10.5f;
float g = 11.7f;
float h = f + g; // Tudo funciona perfect!
Isso pq, por default valores literais com casas decimais são double.
Corretíiiiiiiiiiiiiiiiiiiiiiiiissimo \o/ hahahaha, aeeeeeeee, e a soma de valores literais inteiros resultará em long, apppeeeeeeeeeeeeeeenas se você somar qualquer valor com um long, como int + long, short + long, byte + long, senão, só resultará em int, short + short = int, byte + byte = int, etccccc… rsrsrs, abraços cara, e sucesso.