Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Java:deferenziazione e assegnamento

    Dunque sul manuale Java ho letto delle cose che mi hanno fatto pensare.
    "La deferenziazione è l'operazione che permette di assegnare un valore a un elemento del vettore."
    ad ex.:
    ilMioArray[4]=32;

    differenza tra deferenziazione e assegnamento:
    "L'assegnamento è un'operazione che agisce direttamente sulla variabile, provocandone un cambiamento do valore. La dereferenziazione, invece, è un'operazione indiretta: essa non opera sulla variabile, ma sull'oggetto di memoria puntato da essa."
    Ecco a questo punto vorrei sapere una cosa:
    quando faccio un assegnamento, tipo:
    String k = "q";
    non creo comunque uno spazio di memoria per la variabile k dove poi metto il suo valore?

  2. #2

    Re

    si lo crei.
    In java tutto è puntatore alla fine...solo che non lo tocchi direttamente con mano(in c/c++ si).

    int a=9 è assegnazione

    Classe1 ob=new Classe1(); è referenziazione
    String ob="ciao" è referenziazione
    String ob=new String("ciao"); è sempre referenziazione

    Diciamo che quando si tratta di dati primitivi di solito è assegnazione, mentre quando si tratta di oggetti è sempre, ma non lo vedi, referenziazione.

    ob1=ob2 è referenziazione. L'operatore "=" potrebbe essere overlodato ma java non lo fa vedere.

  3. #3
    Utente di HTML.it L'avatar di Zalex
    Registrato dal
    Aug 2001
    Messaggi
    357
    forse ho capito qual e' il tuo dubbio!
    allora, cerkero' di essere kiaro
    quando fai un'assegnazionenon agisci sulla variabile;quando fai una dereferenziazione agisci sullo spazio di memoria della variabile.
    Esempi (spero) chiarificatori:
    String s;
    String[] a = new String[2];

    assegnazione:
    s = "pippo";
    ora s punta a uno spazio di memoria in cui c'e' scitto "pippo";
    se ora faccio un'altra assegnazione
    s = "pluto";
    s puntera' ad un'altro spazio di memoria(diverso da quello in cui c'e' scritto "pippo")in cui c'e' scritto "pluto"; lo spazio di memoria a cui puntava prima sara' ripulito dal Garbage Collector se non e' puntato da nessun'altra variabile.

    dereferenziazione:
    l'array di Stringhe a ha 2 spazi di memoria riservati per lui, uno puntato da a[0] e l'altro da a[1];
    quando scrivo
    a[0] = "paper";
    a[0] continuera' a puntare allo stesso spazio di memoria,in cui ora pero' c'e' scritto "paper";
    quindi se ora scrivo
    a[0] = "ciao";
    a[0] punta sempre allo stesso spazio di memoria e il nuovo valore "ciao" andra' a sovrascrivere il vecchio valore "paper".

    nella assegnazione non viene sovrascritto nulla, cambia lo spazio di memoria della variabile.

    In altre parole vedila cosi':
    immagina la variabile come un puntatore;
    con l'assegnazione si sposta il puntatore e lo si fa puntare al valore desiderato , con la dereferenziazione non si sposta il puntatore, ma si cambia il valore a cui punta.

    spero di esserti stato di aiuto


  4. #4
    chiarissimo, grazie

  5. #5
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    In effetti in Java questa differenza mi pare piuttosto celata, io non me ne sono mai accorto, poi studiando il c++ ho cominciato a capirci qualcosa...
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

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.