Non esistono i puntatori come in C/C++ ... esistono i "reference" che sotto sotto alla fin fine sono degli "indirizzi" gestiti dalla JVM. Ma non hai il controllo (la "aritmetica" dei puntatori) come in C/C++.
Sì.
Per essere precisi, viene sempre passata una copia del valore. E se si tratta di un reference, viene passata una copia del valore del reference, ovvero chiamante e chiamato hanno entrambi il riferimento allo stesso oggetto.
Sì, viene modificato dalla assegnazione a array[0]. E anche il chiamante che ha passato l'array "vede" la modifica (se ha e tiene il reference all'array, ovvio).