Succede questo perchè tu passi il riferimento all'oggetto, ma quel riferimento (cioè a) nel metodo diventa una variabile interna del metodo stesso! Quindi finche quella variabile punta al tuo oggetto, lo puoi modificare, ma quando viene eseguito a = null tu dici alla variabile interna di non puntare più quell'oggetto, ma non modifichi la variabile esterna, cioè quella contenuta nel main. Spero di essere stato chiaro