Non riesco a capire questo discorso presente sul manuale perché non è supportato da un esempio:
Me la spiegate con un esempio?Due metodi non possono fare riferimento alla stessa istanza di int.
Grazie
Non riesco a capire questo discorso presente sul manuale perché non è supportato da un esempio:
Me la spiegate con un esempio?Due metodi non possono fare riferimento alla stessa istanza di int.
Grazie
Penso si riferisca al fatto che i tipi primitivi (come int, byte, float, double...) sono passati ai metodo per valore, creando di fatto una nuova variabile...
SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
Di questo libro e degli altri (blog personale di recensioni libri) | NO M.P. TECNICI
Credo di aver intuito cosa volesse dire, ma se è così lo ha detto malissimo e usando termini a sproposito.
Se ho intuito giusto (dovremmo vedere il contesto della frase, per capirlo bene), l'autore sta dicendo che, quando si passa ad un metodo un valore intero, il metodo chiamante ed il metodo chiamato non faranno riferimento esattamente alla stessa locazione di memoria, ma ciascun metodo avrà la propria copia locale del valore intero. Ciò significa che, se il metodo chiamato, nella sua elaborazione, cambiasse il valore della variabile passata, tale cambiamento non sarebbe "visto" dal metodo chiamante.
Se è così, l'autore ha spiegato tale concetto in modo assolutamente pessimo. In ogni caso, anche se non fosse questo il contesto, l'autore ha usato a sproposito il termine "istanza", che si riferisce esplicitamente agli oggetti, mentre un valore int non è un oggetto, ma un tipo di dato primitivo; di conseguenza non esistono le "istanze" di int (nemmeno volendo tirare in ballo l'autoboxing).
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Ecco il contesto:
Però a me serve un esempio di codice per capire...Wrapper di tipi primitivi
Come accennato nella Parte 1 del presente volume, java utilizza i tipi primitivi come int e char per motivi di prestazioni. Questi tipi di dati non fanno parte della gerarchia di oggetti. Vengono passati ai metodi per valore e non possono essere passati direttamente per riferimento. Inoltre, due metodi non possono fare riferimento alla stessa istanza di int. A volte, per uno di questi tipi primitivi è necessario creare la rappresentazione di un oggetto.![]()
![]()
![]()
Originariamente inviato da peruzzo
Però a me serve un esempio di codice per capire...![]()
![]()
Secondo te cosa viene stampato alla fine?codice:public class C { static void f (int i) { System.out.println("i = " + i); i = 100; } public static void main(String[] args) { int v = 10; f(v); System.out.println(v); } }
SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
Di questo libro e degli altri (blog personale di recensioni libri) | NO M.P. TECNICI
i=10 ma non mi aiuta a capire...
up!
i = 10
10
![]()
Hai detto che il testo non ti aiuta a capire e che hai bisogno di codice di esempio.
Ti viene postato del codice di esempio (di una banalità disarmante) e dici che non capisci.
Capirai che non è possibile prenderti ogni volta per manina e farti i disegnini, anche perchè che tu legga da un libro o legga su un forum, il problema non è di "concetto", ma di "capacità di capire" e lì possiamo fare ben poco.
C'è un avariabile che viene inizializzata (al valore 10)
Viene passata ad un metodo che ne "modifica il valore" (le assegna 100).
Al ritorno dalla chimata, la variabile non ha cambiato valore (viene stampata e stampa 10).
Cose ne si deduce? Che due metodi non possono condividere lo stesso indirizzo per una variabile di tipo primitivo. Che se io (metodo chiamante) passo una variabile di tipo primitivo ad un metodo e questo me la modifica, io (sempre metodo chiamante) non vedrò alcuna modifica nel valore di quella variabile perchè io (metodo chiamante) lavoro con una copia, lui (metodo chiamato) lavora con un'altra copia.
E' più chiaro? Se non lo è, io mi arrendo.
Ciao.![]()
"Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza
Sono proprio un asino...ho capito, mille grazie. Però questo capita comunque anche con gli oggetti. Esempio:
codice:public class Esempio { static void f (Integer i) { System.out.println("i = " + i); i = new Integer(100); } public static void main(String[] args) { Integer v = 10; f(v); System.out.println(v); } }