¿Por qué la salida es esto debajo de código java?

Rishabh Singh:

A continuación se muestra el código java de sobrecarga.

public class Main {

    public static void main(String args[]){

        Main m = new Main();
        char c  = 'a';
        m.sum(c);
    }

     public void sum(int c){
            System.out.println("A");
     }

     public void sum(Object c){
          System.out.println("B");
     }
}

La salida es "A" pero ¿por qué yo no entendía.

proveedores de Jun:

Estamos pasando un char primitivo como argumento a favor de la suma método.

La suma método (int c) se llama porque char es un subtipo de int (char <: int), así que hay una conversión de ampliación de char a int. Otras primitivas tendrán un comportamiento similar, y su relación subtipo viene dada por:

byte <: corto <: int <: long <: flotador <: doble; y Char <: int

Creo que se preguntan por qué la suma método (Objeto c) no se llama. Supongamos que eliminamos método de la suma (int c), ahora suma (Objeto c) será llamado. Esto se debe a que el carbón primitiva se autoboxed en un objeto de carácter, y el carácter es un subtipo del objeto.

Sin embargo, en el código dado, autoboxing no se producen aquí porque hay un método disponible que lleva en int (un supertipo del carbón de leña), que es más preferible.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=225448&siteId=1
Recomendado
Clasificación