¿Cómo se elige un método sobrecargado cuando un parámetro es el valor nulo literal?

Me encontré con esta pregunta en un cuestionario,

public class MoneyCalc {

   public void method(Object o) {
      System.out.println("Object Verion");
   }

   public void method(String s) {
      System.out.println("String Version");
   }

   public static void main(String args[]) {
      MoneyCalc question = new MoneyCalc();
      question.method(null);
   }
}

La salida de este programa es "String Version". Pero no pude entender por qué al pasar un nulo a un método sobrecargado eligió la versión de cadena. ¿Es nula una variable de cadena apuntando a nada?

Sin embargo, cuando el código se cambia a,

public class MoneyCalc {

   public void method(StringBuffer sb) {
      System.out.println("StringBuffer Verion");
   }

   public void method(String s) {
      System.out.println("String Version");
   }

   public static void main(String args[]) {
      MoneyCalc question = new MoneyCalc();
      question.method(null);
   }
}

da un error de compilación que dice "El método del método (StringBuffer) es ambiguo para el tipo MoneyCalc"

Respuestas a la pregunta(8)

Su respuesta a la pregunta