Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Gostaria de saber por que o código abaixo imprime 8.0 e não 6.0 .
Quando eu chamo t.multi(2.5,2) estou passando um float ou um double e um inteiro, pensava que ele iria executar o primeiro método, mas ele executa o terceiro. Ainda não entendi o porque.
public class Teste {
public float multi(float f, int n){
return f + n *1;
}
public int multi(int dbl, double n){
return dbl * (int) n +2;
}
public double multi(double i, double n){
return i*n +3 ;
}
public static void main(String[] args){
Teste t =new Teste();
System.out.println(t.multi(2.5, 2));
}
}André, então ele decide pelo primeiro parâmetro qual método deve usar? Pois o segundo parâmetro é um inteiro, mas no método é um double e funciona mesmo assim.
obs.: agora entendi a questão do float e do double.
Não, ele se baseia em todos os parâmetros para decidir qual método usar, no seu caso os valores só se encaixam nesse método.
Tudo bem fernando?
Oque acontece nesse caso é que sempre que você digita um valor diretamente no codigo, ele considera isso como double.
se voce armazenar esse valor 2 em variavel inteira, e depois passar para o método, ai sim ele ira interpretar como um inteiro, más se você digita o valor diretamente, ele considera que esse é double, assim como o valor 2.5.
Opa, 2.5 só será float caso você o fizer explicitamente (Ex: (float) 2.5 ou new Float(2.5)) caso contrário ele manterá o padrão double. Double é mais preciso que float, logo, ocupa mais memória, vai da sua necessidade utilizar um ou outro.