"maxwellleonardo":
Felipe... primeiro, obrigado pela atenção...
o legal foi q vc percebeu exatamente o q eu quero entender e tocou bem na ferida...
como o 3 e o 2 sao int, o resultado sera um int
isso que parece logico para todos os programadores Java que eu conheco nao parece nada logico para mim que tenho apenas 6 meses de experiencia com o Java(mas ja sou programador a quase 11 anos). Não estou dizendo que eh certo ou errado, mesmo pq c isto fosse um erro o Java nao teria chegado ao ponto de desenvolvimento atual.
o que me parece lógico eh seguir a ordem "natural" da matematica, quer dizer, um inteiro dividido por outro inteiro NAO NECESSARIAMENTE deve resultar em outro inteiro... compreende?
seria algo tipo...
qqtn = "qualquer tipo numerico"
qqtn/qqtn = double;
e depois faz o cast do double para o tipo da variavel de destino...
exemplo:
double x;
int y;
x = 3/2;//(resultaria em x =1,5);
y = 3/2;//(resultaria em y = 1);
o Java deve ter um outro motivo, tipo performace ou compatibilizar os tipos primitivos com a OO ou outra coisa, e eh justamente este tipo de resposta que eu estou procurando.
isto eh mais uma questao(vou inventar um termo agora) tecnofilosófica.
de qq forma, obrigado.
como eu jah disse, na hora de executar ele nao ve a expressao inteira de uma vez, eh executado calculo por calculo... se vc tem:
x = 3 / 2;
ele vai primeiro dividir o 3 / 2, sem nem verificar o x, como eh int / int ele nao vai fazer nenhuma conversao, se um dos numeros (ou ambos) for double, ele converte automaticamente pra double (resultando em 1.5), somente depois que tem o resultado que vai executar:
x = (resultado da operacao);
dai se x for double, o resultado vai ser convertido pra double, se for int eh armazenado em int...
imagine essa situacao:
int x = 3 / 2;
nesse caso, se 3 / 2 fosse resultar em double, logo em seguida teria que armazenar um double em um int, o que da erro...
e se fosse verificado no que vai ser armazenado, esse codigo daria problemas:
int x;
double y;
y = x = 3 / 2;
pra poder armazenar em x, seria a ser obrigado a ser um int (1), e como em seguida vai atribuir x em y, o y teria que ser 1.0, enquanto desse jeito:
double y;
y = 3 / 2;
o y seria 1.5, ou seja, a mesma expressao dando resultados diferentes em expressoes iguais...
em C/C++ eh a mesma logica...
na minha opiniao, do jeito que ta eh mais logico...