Nell'ultimo assegnamento, tu assegni al parametro del costruttore di Algoritmo1, che è una variabile ben distinta dal 'matrix' campo di istanza di un oggetto StagePrincipale.
Quando il costruttore di Algoritmo1 viene invocato riceve una copia del reference dell'array Circle[][] istanziato in StagePrincipale. Quindi in quel momento 'matrix' parametro di Algoritmo1 e 'matrix' campo di StagePrincipale hanno lo stesso valore, ovvero "puntano" allo stesso identico oggetto array Circle[][].
Ma essendo appunto variabili distinte, se cambi il parametro 'matrix' NON cambi ciò che c'è in 'matrix' campo di StagePrincipale.