Ciao; be' a giudicare dal comportamento di cui parli secondo me tu crei un array di Node ma non lo valorizzi e cioè fai una ocsa del tipo:
codice:
Node[] arrayOfcols = null;
oppure (supponendo una dimensione pari a 10):
codice:
Node[] arrayOfcols = new Node[10];
Be' in entrambi i casi tutti gli elementi dell'array sono ancora null; infatti la VM capisce solo che deve preparare spazio per una array di elementi Node, ma non gli hai detto quali sono i reali valori (nel secondo caso sei stato solo + dettagliato dicendole che lo spazio da riservare è per un array di dieci elementi); allora cosa succede nei metodi che hai scritto? Nel primo caso, e cioè:
Codice PHP:
public void aggiungiValori(){
arrayOfcols[2] = new Node(2,3,4);
Node p = arrayOfcols[2];
if(p != null) System.out.println("p è diverso da null!");
}
Tu prendi un elemento dell'array dichiarato in precedenza (in particolare l'elemento alla terza posizione), lo crei, e cioè gli assegni un valore reale e poi fai assegni a Node p il valore che hai dato a questo elemento; nel secondo caso:
Codice PHP:
public void aggiungiValori(){
Node p = arrayOfcols[2];
arrayOfcols[2] = new Node(2,3,4);
if(p != null) System.out.println("p è diverso da null!");
}
tu assegni a p il valore dell'elemento alla terza posizione (ma questo elemento è ancora null per la VM) dopo di che crei effettivamente l'oggetto con il new Node(2,3,4); di conseguenza p è null. Ora è vero che non programmo da troppo tempo in c ma mi sembra strano che in c possa funzionare mentre in Java no semplicemente perchè per il mondo Java è giusto che nel secondo caso p sia null; anzi se avessi usato, nel secondo caso, p.value avresti avuto un NullPointerException proprio perché p è null.
Spero di averti chiarito le idee e di non averti confuso ancora di più.
Ciao