Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465

    Frase ambigua presente sul mi manuale di java

    Non riesco a capire questo discorso presente sul manuale perché non è supportato da un esempio:
    Due metodi non possono fare riferimento alla stessa istanza di int.
    Me la spiegate con un esempio?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    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

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    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

  4. #4
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    Ecco il contesto:

    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.
    Però a me serve un esempio di codice per capire...

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da peruzzo
    Però a me serve un esempio di codice per capire...
    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);
        }
    }
    Secondo te cosa viene stampato alla fine?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    i=10 ma non mi aiuta a capire...

  7. #7
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    up!

  8. #8
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    i = 10
    10


  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    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

  10. #10
    Utente bannato
    Registrato dal
    Sep 2012
    Messaggi
    465
    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);
        }
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.