Mi potreste spiegare cosa sono e come si usano?grazie 10000000000,io non riesco a capirli![]()
Mi potreste spiegare cosa sono e come si usano?grazie 10000000000,io non riesco a capirli![]()
Se intendi il passaggio dei parametri per riferimento la faccenda è molto semplice.
I tipi primitivi (int, long, double, short, boolean, char, e mi pare siano tutti) vengono passati per valore.
Gli oggetti (Integer, Double, ... , Point2D, Point3D,....) vengono passati per riferimento.
Il passaggio per riferimento è quello che succede nel mondo reale. Se hai un pacchetto di patatine con dentro 100g di patate (un oggetto che vale 100, che ne so, un Integer) e lo passi ad un amico (una funzione), tutto quello che l'amico fa sul pacchetto di patate si riflette sul pacchetto di patate. Se ne mangia 50g, nel pacchetto ne restano 50g e se tu fai in tempo a recuperare il pacchetto o lo trovi vuoto (e allora è meglio che non ti fidi degli amici) oppure ritrovi quello che vi è rimasto: 50g (ringrazia l'amico. In tempi come questi l'onestà è cosa rara).
Veniamo ora al passaggio per valore. E' come una donna di facili costumi. Per quante volte possa passare da funzione a funzione sempre una prostituta resta. Non cambia valore. Se valeva 100€ prima, ne vale 100 qualunque cosa decidano di farne gli amici (le funzioni).
Per spiegazioni più serie, forse qui trovi qualcosa di meglio: http://www.ba.infn.it/~zito/jsem/parametri.html
Comunque l'idea è che degli oggetti viene passato il riferimento, cioè un indirizzo in memoria che individua univocamente l'oggetto. Perciò quando passi passi un oggetto passi il suo indirizzo in memoria. Dell'oggetto esiste un'unica copia e su quella lavorano tutte le funzioni a cui hai passato il riferimento.
Dei dati primitivi viene passato il valore, quindi ogni volta che passi un dato primitivo a una funzione è come se duplicassi il valore. Quello passato alla funzione vive di vita propria e le operazioni che vengono fatte su di lui non hanno influenza sul valore esterno alla funzione.
Nota particolare la meritano le Stringhe che sono oggetti ma a tutti gli effetti è come se fossero passate per valore. Infatti le stringhe non possono essere modificate.
String a = "ciao"; // a punta "ciao"
String b = "hello"; // b punta "hello"
b = a; // a = b. a e b puntano "ciao"
b = new String ("Hei!"); // a punta ancora a "ciao", ma b punta a "Hei!"
[A]
b = a; // a = b => a e b puntano di nuovo a "Hei"
b = a+b; // a punta a "Hei!", b a "Hei!Hei!"
[B]
Se invece le stringhe fossero modificabili come un qualunque altro oggetto
b = a+b; // b diventerebbe "Hei!Hei!", ma a e b sarebbero lo stesso oggetto, quindi anche a sarebbe "Hei!Hei!"
Se vuoi verificare la faccenda prova a fare questo esperimento con String e StringBuffer. Con String ottiene il risultato in [A]
con StringBuffer (ovviamente, non puoi usare +, ma devi invocare il metodo giusto) ottieni il risultato in [B]
Ovviamente.. ti auguro che qualcun altro dotato di più buon senso decida di aiutarti domani mattina...
"Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
Linus Torvalds
Ti invito a leggere questo breve articolo:
http://programmaremobile.blogspot.co...-valori-g.html
Giuseppe Morreale
Sviluppatore software fullstack