Java, pass-by-value, variabili di riferimento

Ho un problema con la comprensione dell’azione “pass-by-value” di Java nel seguente esempio:

public class Numbers { static int[] s_ccc = {7}; static int[] t_ccc = {7}; public static void calculate(int[] b, int[] c) { System.out.println("s_ccc[0] = " + s_ccc[0]); // 7 System.out.println("t_ccc[0] = " + t_ccc[0]); // 7 b[0] = b[0] + 9; System.out.println("\nb[0] = " + b[0]); // 16 c = b; System.out.println("c[0] = " + c[0] + "\n"); // 16 } public static void main(String[] args) { calculate(s_ccc, t_ccc); System.out.println("s_ccc[0] = " + s_ccc[0]); // 16 System.out.println("t_ccc[0] = " + t_ccc[0]); // 7 } } 

Lo so perché s_ccc è una variabile di riferimento, quando la do al metodo calculate () e apporto alcune modifiche ai suoi elementi nel metodo, le modifiche rimangono anche dopo che ho lasciato il metodo. Penso che lo stesso dovrebbe essere con t_ccc. È ancora una variabile di riferimento, la do al metodo calculate (), e nel metodo cambio il riferimento a t_ccc per essere quello di s_ccc. Ora t_ccc dovrebbe essere una variabile di riferimento che punta a un array, che ha un elemento di tipo int uguale a 16. Ma quando il metodo calculate () è lasciato, sembra che t_ccc punti il ​​suo vecchio object. Perché sta succedendo? Non dovrebbe rimanere il cambiamento anche per questo? Dopo tutto è una variabile di riferimento.

Saluti