[quote=“maxwellleonardo”]Felipe… primeiro, obrigado pela atenção…
o legal foi q vc percebeu exatamente o q eu quero entender e tocou bem na ferida…
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:
[code]double x;
int y;
x = 3/2;//(resultaria em x =1,5);
y = 3/2;//(resultaria em y = 1);
[/code]
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.[/quote]
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…