Non c'era enfasi nel mio post precedente, stavo solo dandoti delle indicazioni (che potrebbero anche essere utili ad altri) su come affrontare la problematica.

Quello che hai fatto tu è una cosa diversa: non hai modificato un oggetto, ma lo hai ricreato utilizzando l'operatore new. L'operatore new RIALLOCA della memoria per l'oggetto, quindi viene creata una copia dell'oggetto all'interno del metodo prova (ossia, non stai più lavorando sullo stesso oggetto, ma su un altro oggetto, come dice l'operatore, nuovo).

Prova con questo semplice esempio:
codice:
public class Intero {
   private int valore;
   public Intero(int valore) { this.valore = valore; }
   public void setValore(int valore) { this.valore = valore; }
   public int getValore() { return valore; }
   public String toString() { return "" + valore; }
   public static void main(String [] args) {
      Intero a = new Intero(5);
      System.out.println("Prima della chiamata: " + a);
      prova(a);
      System.out.println("Tornando nel main: " + a);
   }
   public static void prova(Intero b) {
      b.setValore(8);
      System.out.println("All'interno del metodo: " + b);
   }
}
Ciao.