Pregunta Extraña salida de código


Me he topado con un código bastante extraño que me sorprende que no cause un error

public class WeirdCode {

    public static int fooField = 42;

    public WeirdCode getFoo(){
        return null; 
    } 
    public static void main(String args[]) {
        WeirdCode foo = new WeirdCode();
        System.out.println(foo.getFoo().fooField); 
    }
}

Sorprendentemente, ¡imprime 42! ¿Alguien puede explicar?


5
2018-06-27 01:38


origen


Respuestas:


Las referencias a miembros estáticos de una clase se resuelven en tiempo de compilación. Al compilador no le importa el valor de la expresión, solo su tipo, y por lo tanto un ((WeirdCode) null).fooField solo resuelve WeirdCode.fooField como cualquier otra cosa


13
2018-06-27 01:42