speedwago
23-02-2004, 03:23
sul discorso passaggio valore/riferimento .....non e' che con i primitivi il passaggio e' per rifermento mentre con gli oggetti il passaggio e' x riferimento... il passaggio è sempre e solo per riferimento!!
il problema e' che gli operatori si comportano in modo da indurti a credere a questo!!!
praticamente nella jvm (potete consultare la specifica). interi, double e String sono gli unici tipi ad essere assegnati tramite literal e per questo considerati oggetti costanti (non modificabili)!!
vi e' quindi un constant string pool , un cosatant double pool ecc ecc ecc...
gli operatori + - ecc ecc ecc funzionano in modo da creare una nuova isntanza dell'oggetto.
quindi se faccio i+1 o i++ io vado a a creare un nuovo intero costante, e lo assegno al riferimento ma non vado a modificare il riferimento!!
Infatti se fate il giochetto che avete fatto con l'intero che passa da 20 a 30 con un oggetto di tipo String succede la stessa cosa!!!!
praticamente x oggetti che non hanno il costruttorel'operatore = funziona come operator new... nel caso del metodo che cambiia il valore dell 'intero da 20 a 30
public void eseguiEsperimento() {
int intero = 10;
System.out.println("prima del passaggio");
System.out.println(intero);
System.out.println("dopo il passaggio");
passaggioPerValore(intero);
System.out.println(intero);
}
public void passaggioPerValore(int primitivo) {
primitivo = 20;
}
esso crea un varbl nello scope di passaggioPerValore che ha lo stesso nome di intero ma non è intero!
il problema e' che gli operatori si comportano in modo da indurti a credere a questo!!!
praticamente nella jvm (potete consultare la specifica). interi, double e String sono gli unici tipi ad essere assegnati tramite literal e per questo considerati oggetti costanti (non modificabili)!!
vi e' quindi un constant string pool , un cosatant double pool ecc ecc ecc...
gli operatori + - ecc ecc ecc funzionano in modo da creare una nuova isntanza dell'oggetto.
quindi se faccio i+1 o i++ io vado a a creare un nuovo intero costante, e lo assegno al riferimento ma non vado a modificare il riferimento!!
Infatti se fate il giochetto che avete fatto con l'intero che passa da 20 a 30 con un oggetto di tipo String succede la stessa cosa!!!!
praticamente x oggetti che non hanno il costruttorel'operatore = funziona come operator new... nel caso del metodo che cambiia il valore dell 'intero da 20 a 30
public void eseguiEsperimento() {
int intero = 10;
System.out.println("prima del passaggio");
System.out.println(intero);
System.out.println("dopo il passaggio");
passaggioPerValore(intero);
System.out.println(intero);
}
public void passaggioPerValore(int primitivo) {
primitivo = 20;
}
esso crea un varbl nello scope di passaggioPerValore che ha lo stesso nome di intero ma non è intero!