• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Problema risolto [Java] Funzione che però non funziona

@ptm ha ragione, in Java non esiste il passaggio per riferimento come in C però è anche vero che in Java il riferimento stesso ad un oggetto è passato per valore, in sostanza viene fatta una copia del valore dell'indirizzo in memoria dell'oggetto in modo che se il programmatore crea un metodo che modifica una variabile non si avrà alcun effetto sulla variabile originale. Per una migliore comprensione basti vedere il metodo equals che restituisce un valore booleano : restituisce true se gli oggetti puntano entrambi allo stesso riferimento non se hanno lo stesso valore, inteso come proprietà. In C invece esiste il passaggio per riferimento, un esempio può essere il seguente :

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Nell'ultima riga viene segnalato il seguente errore : IntelliSense: impossibile assegnare un valore di tipo "int" a un'entità di tipo "int *".

Questo vuol dire che la variabile a, essendo dichiarata come puntatore non può essere modificata per valore, ovvero con un semplice a = tot ma ha bisogno dell'operatore * che va a modificare il riferimento in memoria della variabile.
 
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Nell'ultima riga viene segnalato il seguente errore : IntelliSense: impossibile assegnare un valore di tipo "int" a un'entità di tipo "int *".

Questo vuol dire che la variabile a, essendo dichiarata come puntatore non può essere modificata per valore, ovvero con un semplice a = tot ma ha bisogno dell'operatore * che va a modificare il riferimento in memoria della variabile.

In questa maniera compila, ma smette di funzionare:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
Questo perché la variabile viene inizializzata a 0, ma comunque il mio era solo un esempio non si utilizzano così i puntatori, si utilizzano in una funzione - non dichiarandoli nel suo corpo - e vengono inizializzati dentro la funzione.

Intendi tipo così?

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

P.S: ragazzi, so che va un pochino off-topic ma purtroppo i problemi si riscontrano uno dopo l'altro siccome sono tutti correlati tra loro; sarebbe come creare 10 topic all'ora

Perché, in questo caso, ho POTUTO usare l'asterisco per attribuire un valore al puntatore (*variabile = 32) quando mi da errore se faccio la stessa cosa nel main (codice nel POST precedente)?
 
Intendi tipo così?

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Esattamente.

Perché, in questo caso, ho POTUTO usare l'asterisco per attribuire un valore al puntatore (*variabile = 32) quando mi da errore se faccio la stessa cosa nel main (codice nel POST precedente)?

Te l'ho spiegato : un puntatore non è una variabile, mentre una variabile può essere inizializzata in qualsiasi momento e in qualsiasi parte del codice con i puntatori non funziona così altrimenti quale sarebbe la differenza.
 
  • Like
Reactions: 1 person
@ptm infatti nessuno ha detto il contrario ,dato che stavo parlando di C++ ^^ inoltre come spiegato da @System32 che mi ha anticipato in java non esiste un vero e proprio passaggio per riferimento ma quando si passa a un metodo un oggetto ,il riferimento viene passato per valore. Ma dato che il valore passato fa riferimento a un oggetto anche la copia di quest'ultimo fa riferimento all' oggetto causandone le modifiche. Inoltre già nei post precedenti ero stato abbastanza chiaro ... tra l'altro la & in java rappresenta l'and logico quindi prima di specificare cose già dette leggete.
In genere tra gli sviluppatori che usano java si tende a fare un netta distinzioni tra il passaggio di tipi primitivi e oggetti, anche se si tratta sempre di un passaggio per Valore
@HabboFanNumero1 stiamo andando ben oltre , il problema originario è risolto?
 
Ultima modifica: